安装mysql(略)
有两种方式:
直接下载引擎插件包 Linkis 引擎插件下载
单独编译引擎插件(需要有 maven 环境)
这里通过单独编译获取插件包
# 编译
cd ${linkis_code_dir}/linkis-engineconn-plugins/jdbc/
mvn clean install
# 编译出来的引擎插件包,位于如下目录中
${linkis_code_dir}/linkis-engineconn-plugins/jdbc/target/out/
执行很快就产生了插件包,比较顺利。
引擎插件包上传到服务器的引擎目录下
${LINKIS_HOME}/lib/linkis-engineplugins
上传后目录结构如下所示
linkis-engineconn-plugins/
├── jdbc
│ ├── dist
│ │ └── 4
│ │ ├── conf
│ │ └── lib
│ └── plugin
│ └── 4
通过重启 linkis-cg-linkismanager 服务刷新引擎
cd ${LINKIS_HOME}/sbin
sh linkis-daemon.sh restart cg-linkismanager
可以查看数据库中的 linkis_engine_conn_plugin_bml_resources 这张表的 last_update_time 是否为触发刷新的时间。(实际因为执行需要时间所以会有延迟)
#登陆到 `linkis` 的数据库
select * from linkis_cg_engine_conn_plugin_bml_resources;
sh ./bin/linkis-cli -engineType jdbc-4 \
-codeType jdbc -code "show databases;" \
-submitUser user1 -proxyUser user1 \
-runtimeMap wds.linkis.jdbc.connect.url=jdbc:mysql://xxx:port \
-runtimeMap wds.linkis.jdbc.driver=com.mysql.jdbc.Driver \
-runtimeMap wds.linkis.jdbc.username=user \
-runtimeMap wds.linkis.jdbc.password=passwd
上述shell是连接mysql的配置,同样地,连接doris和starrocks也是通过mysql协议连接的,所以配置基本一致。
sh ./bin/linkis-cli -creator IDE \
-engineType jdbc-4 -codeType jdbc \
-code "show tables" \
-submitUser user1 -proxyUser user1
curl --location --request POST 'http://xxx:8085/api/rest_j/v1/entrance/execute' \
--header 'Token-Code: BML-AUTH' \
--header 'Token-User: user1' \
--header 'Content-Type: application/json' \
--data-raw '{
"executionContent": {"code": "show databases;", "runType": "jdbc"},
"proxyUser":"logsget",
"params": {
"variable": {},
"configuration": {
"runtime": {
"wds.linkis.jdbc.connect.url":"jdbc:mysql://xxx:3306",
"wds.linkis.jdbc.driver":"com.mysql.jdbc.Driver",
"wds.linkis.jdbc.username":"root",
"wds.linkis.jdbc.password":"xxx",
"wds.linkis.engine.runtime.datasource.maxVersionId":"2"
}
}
},
"labels": {
"engineType": "jdbc-4",
"executeUser": "user1"
}
}'
- 接口是dss提交任务的接口,这里我们可以通过postman进行模拟dss的访问请求
- header中添加token的验证,这里是我们上篇手动创建的token,以便我们有权限请求
- 请求体:
– code:查询语句
– wds.linkis.jdbc.*:为库的连接信息
– wds.linkis.engine.runtime.datasource.maxVersionId:重点:用于标识不同的连接,我们暂不分析源码逻辑,linkis会维护一个map(key:连接标识,value:连接【以单例的形式存在】),通过传递不同标识,获取map中对应的连接,如果不添加这个参数,那么在执行任务时,只能找到第一次请求的连接。
添加gp驱动包greenplum-jdbc-5.1.4.jar放到
/data01/linkis/lib/linkis-engineconn-plugins/jdbc/dist/4/lib
下,刷新引擎:
cd ${LINKIS_HOME}/sbin
sh linkis-daemon.sh restart cg-linkismanager
等待引擎更新
可以查看数据库中的 linkis_engine_conn_plugin_bml_resources 这张表的 last_update_time 是否为触发刷新的时间。
#登陆到 `linkis` 的数据库
select * from linkis_cg_engine_conn_plugin_bml_resources;
调用接口测试
curl --location --request POST 'http://xxx:8085/api/rest_j/v1/entrance/execute' \
--header 'Token-Code: BML-AUTH' \
--header 'Token-User: logsget' \
--header 'Content-Type: application/json' \
--data-raw '{
"executionContent": {"code": "show databases;", "runType": "jdbc"},
"proxyUser":"logsget",
"params": {
"variable": {},
"configuration": {
"runtime": {
"wds.linkis.jdbc.connect.url":"jdbc:pivotal:greenplum://xxx:5432",
"wds.linkis.jdbc.driver":"com.pivotal.jdbc.GreenplumDriver",
"wds.linkis.jdbc.username":"xx",
"wds.linkis.jdbc.password":"xxx",
"wds.linkis.engine.runtime.datasource.maxVersionId":"2"
}
}
},
"labels": {
"engineType": "jdbc-4",
"executeUser": "logsget"
}
}'
linkis的数据源管理
基本逻辑:
- 在数据源管理创建相关数据源连接,维护到数据库中
- 遍写任务sql
- 触发接口提交任务:linkis根据指定数据源名称,查到相关引擎参数,创建连接,或从map中获取链接,然后提交任务。
多数据源功能与优点:
Linkis 引擎插件下载
提交任务
sh ./bin/linkis-cli -engineType jdbc-4 \
-codeType jdbc -code "show tables" \
-submitUser taiyi -proxyUser taiyi \
-runtimeMap wds.linkis.jdbc.connect.url=jdbc:mysql://11.33.176.205:3306/linkis \
-runtimeMap wds.linkis.jdbc.driver=com.mysql.jdbc.Driver \
-runtimeMap wds.linkis.jdbc.username=xmanager \
-runtimeMap wds.linkis.jdbc.password=XManager_360.cn
报错:
2023-07-27 22:48:40.048 INFO This TaskID_78_otJobId_astJob_2_retry_10 retry, new retry-task is:TaskID_78_otJobId_astJob_2_retry_11, retryCount: 2.reason:ask Engine failed
errCode: 12003 ,desc: xxx:9101_23 Failed to async get EngineNode
LinkisRetryException: errCode: 30002 ,desc: The em of labels {userCreator=taiyi-
LINKISCLI, codeType=jdbc, engineType=jdbc-4, executeOnce=} not found ,ip:
xxx ,port: 9101 ,serviceKind: linkis-cg-linkismanager ,ip:
xxx ,port: 9104 ,serviceKind: linkis-cg-entrance
解决办法:
1. 查看表 linkis_cg_manager_service_instance 是否有数据
2. 查看执行任务的参数是否正确,如 codeType,engineType
3. 可以truncate表之后重启engineconnmanager服务
排查到这里实属有些心累,因为修改了挺多地方,还是不能正常使用,此时暂时认为官方下载的引擎包不能适配我的环境,接下来下载源码通过编译打包安装。