StarRocks Java udf-fsnotify 文件链接工具

StarRocks Java udf-fsnotify 文件链接工具

背景

当在StarRocks中使用UDF函数时,创建函数使用的是远程文件

“file” = “http://starrocks-udf.cn.fsnotify.com:11321/public/demo.jar

那么我们的StarRocks分为开发环境与生产环境,开发环境直接访问,生产环境需要分发jar到负载均衡后端节点,当用户自行上传jar后,自动检测文件夹/文件是否发生变化,如发生变化,则分发文件。

场景

dev:文件上传到程序服务器,StarRocks开发环境直接访问这个服务器上的jar文件。

prod:文件上传到程序服务器,程序将文件自动分发给StarRocks生产环境的每个fe,而fe作为后端节点它拥有一个负载均衡IP/域名。

配置

udf:
#  服务端口
  port: 11322
#  jar包存放主目录
  localpath:
#    主目录
    main: /u/users/svccndlopsns/chengken/udf
#    子目录(会在主目录下创建子目录,每个子目录代表相关的业务和主题域)
    subf: common,ec,fin,fulfill,item,logis,ods,ops,order,public,pur,scm,stock,user
  prod:
#    远程访问用户
    username: starrocks
#    访问私钥
    privatekey: /u/users/svccndlopsns/.ssh/id_rsa
#    负载均衡地址
    vip: starrocks-udf.com:11321
#    需要分发的节点(也可以是负载均衡地址)
    host:
      - 10.10.8.29
      - 10.10.8.89
      - 10.10.8.75
#    分片节点上的目录
    remotepath: /u/udf/jar

schema:
#  飞书代理
  larkproxy: http://proxy-feishu.com
#  飞书机器人
  larkrobot: 27b942-0a19-4248-a495-80ae7b4

log:
  line: true
  level: 0
  path: '/u/user/svccndlopsns/chengken/log'
  console: true

启动

程序拥有两种模式

开发环境模式

开发环境配置文件只需要填写下面的几个即可,prod可不填

udf:
  port: 11323
  localpath:
    main: /u/users/svccndlopsns/chengken/udf 
    subf: common,ec,fin,fulfill,item,logis,ods,ops,order,public,pur,scm,stock,user

生产环境模式

生产环境配置文件需要配置prod,否则无法分发文件(当然只用来分发文件也是没问题的)

udf:
  port: 11323
  localpath:
    main: /u/users/svccndlopsns/chengken/udf 
    subf: common,ec,fin,fulfill,item,logis,ods,ops,order,public,pur,scm,stock,user
  prod:
    username: starrocks
    privatekey: /u/users/svccndlopsns/.ssh/id_rsa
    vip: starrocks-udf.cn.wal-mart.com:11321
    host:
      - 10.10.8.29
      - 10.10.8.89
      - 10.10.8.75
    remotepath: /u/udf/jar

开发环境

文件上传

curl -F "file=@demo.jar" "http://10.10.8.12:11322/upload?env=dev&path=public"

如配置了飞书,会收到通知
2025-09-17-14-36-18-image

文件上传成功,UDF: "file" = "http://10.10.8.12:11322/dev/public/demo.jar"

这个时候使用浏览器访问http://10.10.8.12:11322/dev/public也能看到文件

2025-09-17-14-38-29-image

浏览器打开http://10.10.8.12:11322/ 能看到/u/users/svccndlopsns/chengken/udf目录下的所有文件夹与文件。

创建函数
CREATE GLOBAL FUNCTION MY_UDF_JSON_GET(string, string) 
RETURNS string
properties (
    "symbol" = "com.starrocks.udf.sample.UDFJsonGet", 
    "type" = "StarrocksJar",
    "file" = "http://10.10.8.12:11322/dev/public/demo.jar"
);

生产环境

文件上传

curl -F "file=@demo.jar" "http://10.10.8.12:11322/upload?env=prod&path=public"

文件上传后,自动分发到负载均衡的后端节点。访问时,直接使用负载均衡IP/域名。(后端IP上配置udf-fsnotify程序用作映射文件)

对于VIP/负载均衡地址的映射,咱们自行配置即可。

2025-09-17-15-13-25-image

在配置飞书提醒的情况下,依旧能收到飞书推送

创建函数
CREATE GLOBAL FUNCTION MY_UDF_JSON_GET(string, string) 
RETURNS string
properties (
    "symbol" = "com.starrocks.udf.sample.UDFJsonGet", 
    "type" = "StarrocksJar",
    "file" = "http://starrocks-udf.com:11321/public/demo.jar"
);

@http://github.com/chengkenli/udf-fsnotify

(帖子被作者删除,如无标记将在 24 小时后自动删除)