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"
如配置了飞书,会收到通知
文件上传成功,UDF: "file" = "http://10.10.8.12:11322/dev/public/demo.jar"
这个时候使用浏览器访问http://10.10.8.12:11322/dev/public也能看到文件
浏览器打开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/负载均衡地址的映射,咱们自行配置即可。
在配置飞书提醒的情况下,依旧能收到飞书推送
创建函数
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"
);