From 95f6e0034e906c1796f2013968736b30dd4d2288 Mon Sep 17 00:00:00 2001 From: Zzm0809 <934230207@qq.com> Date: Tue, 30 Apr 2024 15:36:31 +0800 Subject: [PATCH] [Feature] Implementing Yarn mode cluster configuration supports configuring the rs protocol (#3442) Signed-off-by: Zzm0809 <934230207@qq.com> Co-authored-by: Zzm0809 --- .../gateway/yarn/YarnApplicationGateway.java | 19 ++++++++++++++- dinky-web/src/locales/en-US/pages.ts | 4 +++- dinky-web/src/locales/zh-CN/pages.ts | 4 +++- .../ApplicationConfig/index.tsx | 8 ++++++- .../register_center/cluster_manage.md | 24 ++++++++++--------- 5 files changed, 44 insertions(+), 15 deletions(-) diff --git a/dinky-gateway/src/main/java/org/dinky/gateway/yarn/YarnApplicationGateway.java b/dinky-gateway/src/main/java/org/dinky/gateway/yarn/YarnApplicationGateway.java index aae4b6092c..2193be4ca9 100644 --- a/dinky-gateway/src/main/java/org/dinky/gateway/yarn/YarnApplicationGateway.java +++ b/dinky-gateway/src/main/java/org/dinky/gateway/yarn/YarnApplicationGateway.java @@ -28,6 +28,7 @@ import org.dinky.gateway.result.GatewayResult; import org.dinky.gateway.result.YarnResult; import org.dinky.utils.LogUtil; +import org.dinky.utils.URLUtils; import org.apache.flink.client.deployment.ClusterSpecification; import org.apache.flink.client.deployment.application.ApplicationConfiguration; @@ -42,6 +43,8 @@ import java.util.Collections; import java.util.stream.Collectors; +import cn.hutool.core.util.URLUtil; + /** * YarnApplicationGateway * @@ -54,6 +57,20 @@ public GatewayType getType() { return GatewayType.YARN_APPLICATION; } + /** + * format url + *

if url is rs protocol, convert to file path

+ * @param url url + * @return formatted url + */ + private String formatUrl(String url) { + if (URLUtil.url(url).getProtocol().equals("rs")) { + return URLUtils.toFile(url).getAbsolutePath(); + } else { + return url; + } + } + @Override public GatewayResult submitJar(FlinkUdfPathContextHolder udfPathContextHolder) { if (Asserts.isNull(yarnClient)) { @@ -61,7 +78,7 @@ public GatewayResult submitJar(FlinkUdfPathContextHolder udfPathContextHolder) { } AppConfig appConfig = config.getAppConfig(); - configuration.set(PipelineOptions.JARS, Collections.singletonList(appConfig.getUserJarPath())); + configuration.set(PipelineOptions.JARS, Collections.singletonList(formatUrl(appConfig.getUserJarPath()))); configuration.setString( "python.files", udfPathContextHolder.getPyUdfFile().stream().map(File::getName).collect(Collectors.joining(","))); diff --git a/dinky-web/src/locales/en-US/pages.ts b/dinky-web/src/locales/en-US/pages.ts index f3db9970e6..fbd9956fc2 100644 --- a/dinky-web/src/locales/en-US/pages.ts +++ b/dinky-web/src/locales/en-US/pages.ts @@ -785,8 +785,10 @@ export default { 'rc.cc.sqlSubmitJarPath': 'Jar File Path', 'rc.cc.sqlSubmitJarPathHelp': 'Please enter the Jar file path! eg: hdfs:///dinky/dinky-app-1.16-with-dependencies.jar', + 'rc.cc.sqlSubmitJarPathHelpTips': + 'In Yarn mode, this parameter can be set to: hdfs:///dinky/dinky-app-1.17-with-dependencies.jar Alternatively, if rs:/dinky/inky app 1.17 with dependencies. jar is set to the rs:/ protocol, the jar package needs to be uploaded to Dinky`s resource center and the path filled in. In K8s mode, only the local://protocol is supported', 'rc.cc.start': 'Start Session Cluster', - 'rc.cc.submitSqlConfig': 'Submit FlinkSQL Config items (required in Application mode)', + 'rc.cc.submitSqlConfig': 'Submit FlinkSQL Config items', 'rc.cc.tmHeap': 'TaskManager Heap Memory', 'rc.cc.tmHeapHelp': 'Please enter the TaskManager heap memory size! This parameter configuration item is', diff --git a/dinky-web/src/locales/zh-CN/pages.ts b/dinky-web/src/locales/zh-CN/pages.ts index 631004e3e0..35bfcf9b32 100644 --- a/dinky-web/src/locales/zh-CN/pages.ts +++ b/dinky-web/src/locales/zh-CN/pages.ts @@ -752,8 +752,10 @@ export default { 'rc.cc.sqlSubmitJarPath': 'Jar 文件路径', 'rc.cc.sqlSubmitJarPathHelp': '请输入 Jar 文件路径! eg: hdfs:///dinky/dinky-app-1.16-with-dependencies.jar', + 'rc.cc.sqlSubmitJarPathHelpTips': + 'Yarn 模式下此参数可以设置为: hdfs:///dinky/dinky-app-1.17-with-dependencies.jar 或者 rs:/dinky/dinky-app-1.17-with-dependencies.jar 如果设置为 rs:/ 协议,则需要将该jar包上传到 Dinky 的资源中心中,然后填写该路径。K8s 模式下仅支持 local:// 协议', 'rc.cc.start': '启动 Session 集群', - 'rc.cc.submitSqlConfig': '提交 FlinkSQL 配置项 (Application 模式必填)', + 'rc.cc.submitSqlConfig': '提交 FlinkSQL 配置项', 'rc.cc.tmHeap': 'TaskManager 堆内存', 'rc.cc.tmHeapHelp': '请输入 TaskManager 堆内存大小! 此参数配置项为', 'rc.cc.tmMem': 'TaskManager 内存', diff --git a/dinky-web/src/pages/RegCenter/Cluster/Configuration/components/ConfigurationModal/ConfigurationForm/ApplicationConfig/index.tsx b/dinky-web/src/pages/RegCenter/Cluster/Configuration/components/ConfigurationModal/ConfigurationForm/ApplicationConfig/index.tsx index fa18362ed7..ae9bdfa7c0 100644 --- a/dinky-web/src/pages/RegCenter/Cluster/Configuration/components/ConfigurationModal/ConfigurationForm/ApplicationConfig/index.tsx +++ b/dinky-web/src/pages/RegCenter/Cluster/Configuration/components/ConfigurationModal/ConfigurationForm/ApplicationConfig/index.tsx @@ -28,10 +28,16 @@ const ApplicationConfig = () => { diff --git a/docs/docs/user_guide/register_center/cluster_manage.md b/docs/docs/user_guide/register_center/cluster_manage.md index 815b7e804b..b6032c54f5 100644 --- a/docs/docs/user_guide/register_center/cluster_manage.md +++ b/docs/docs/user_guide/register_center/cluster_manage.md @@ -31,8 +31,10 @@ title: 集群 3. 自动注册的集群无需关心注册过多的情况, 系统会定时清理过期的 自动注册的 Flink 实例,手动注册的无影响 4. 手动注册的集群需要手动管理 Flink 实例, 如需删除 Flink 实例,请鼠标悬浮某一 Flink 实例,点击删除按钮即可删除 Flink 实例 5. 提供手动进行心跳检测 -6. 所有Flink 实例删除前会进行引用检测,如果有引用,则无法删除(此为避免实际运行中的任务关联到该Flink 实例,从而导致一系列问题) -7. 手动注册的集群可以直接删除(前提是未被使用),如果自动注册的集群如果状态为`健康`需要先停止 Flink 实例,然后再删除 Flink 实例. +6. 所有Flink 实例删除前会进行引用检测,如果有引用,则无法删除(此为避免实际运行中的任务关联到该Flink + 实例,从而导致一系列问题) +7. 手动注册的集群可以直接删除(前提是未被使用),如果自动注册的集群如果状态为`健康`需要先停止 Flink 实例,然后再删除 Flink + 实例. 如需查看 自动注册 和 手动注册 下的 Flink 实例,请点击切换按钮进行查看 ::: @@ -47,13 +49,13 @@ title: 集群 ### 参数解读 -| 参数 | 说明 | 是否必填 | 默认值 | 示例值 | -|-----------------|------------------------------------------------------------------------------------|:----:|:-----:|:-------------:| -| 集群名称 | 集群名称, 用于区分不同集群 | 是 | 无 | flink-session | -| 集群别名 | 集群别名, 用于区分不同集群, 如不填默认同集群名称 | 否 | 同集群名称 | flink-session | -| 集群类型 | 集群类型, 目前支持 Local, Standalone, Yarn Session, Kubernetes Session | 是 | 无 | Standalone | +| 参数 | 说明 | 是否必填 | 默认值 | 示例值 | +|------------------|----------------------------------------------------------------------------------|:----:|:-----:|:-------------:| +| 集群名称 | 集群名称, 用于区分不同集群 | 是 | 无 | flink-session | +| 集群别名 | 集群别名, 用于区分不同集群, 如不填默认同集群名称 | 否 | 同集群名称 | flink-session | +| 集群类型 | 集群类型, 目前支持 Local, Standalone, Yarn Session, Kubernetes Session | 是 | 无 | Standalone | | JobManager 高可用地址 | 添加 Flink 集群的 JobManager 的 RestApi 地址。当 HA 模式时,地址间用英文逗号分隔,例如:192.168.123.101:8081 | 是 | 无 | -| 备注 | 备注, 用于备注集群信息 | 否 | 无 | flink-session | +| 备注 | 备注, 用于备注集群信息 | 否 | 无 | flink-session | ## 集群配置 @@ -91,9 +93,9 @@ title: 集群 - 提交 FlinkSQL 配置项 (Application 模式必填)-公共配置 -| 参数 | 说明 | 是否必填 | 默认值 | 示例值 | -|----------|----------------------------------------------------------------------------------------------------------|:----:|:---:|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| -| Jar 文件路径 | 指定 Jar 文件路径,如果该集群配置用于提交 Application 模式任务时 则必填
需要包含以下文件:dinky-app-{version}-jar-with-dependencies.jar | 否 | 无 | hdfs:///dinky/dinky-app-1.16-1.0.0-SNAPSHOT-jar-with-dependencies.jar
请注意: 如果使用 Kubernetes 模式,路径需要指定为: local:///dinky/dinky-app-1.16-1.0.0-SNAPSHOT-jar-with-dependencies.jar | +| 参数 | 说明 | 是否必填 | 默认值 | 示例值 | +|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:----:|:---:|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| +| Jar 文件路径 | 指定 Jar 文件路径,如果该集群配置用于提交 Application 模式任务时 则必填
需要包含以下文件:dinky-app-{version}-jar-with-dependencies.jar
Yarn 模式下此参数可以设置为: hdfs:///dinky/dinky-app-1.17-with-dependencies.jar 或者 rs:/dinky/dinky-app-1.17-with-dependencies.jar
如果设置为 rs:/ 协议,则需要将该jar包上传到 Dinky 的资源中心中,然后填写该路径。
K8s 模式下仅支持 local:// 协议 | 是 | 无 | hdfs:///dinky/dinky-app-1.16-1.0.0-SNAPSHOT-jar-with-dependencies.jar
请注意: 如果使用 Kubernetes 模式,路径需要指定为: local:///dinky/dinky-app-1.16-1.0.0-SNAPSHOT-jar-with-dependencies.jar | - Flink 预设配置(高优先级)-公共配置