解决Flink on Yarn模式多Yarn Session会话提交

目录

1、存在问题

[1.1 提交指定application的会话](#1.1 提交指定application的会话)

[1.2 提交application不存在的会话](#1.2 提交application不存在的会话)

[1.3 Kill 最新的application会话,然后指定application会话提交](#1.3 Kill 最新的application会话,然后指定application会话提交)

2、如何解决

3、补充说明

[3.1 默认/tmp目录下指定的最新会话的ID](#3.1 默认/tmp目录下指定的最新会话的ID)

[3.2 修改/tmp目录下的临时缓存文件,不设置参数"-D execution.target=yarn-session"](#3.2 修改/tmp目录下的临时缓存文件,不设置参数"-D execution.target=yarn-session”)

[3.3 修改/tmp目录下的临时缓存文件,设置参数"-D execution.target=yarn-session"](#3.3 修改/tmp目录下的临时缓存文件,设置参数"-D execution.target=yarn-session”)

[3.4 删除/tmp目录下的临时缓存文件(前面设置的ID为22)](#3.4 删除/tmp目录下的临时缓存文件(前面设置的ID为22))

[3.4.1 情景一(设置参数,指定ID):](#3.4.1 情景一(设置参数,指定ID):)

[3.4.2 情景二(不设置参数,指定ID):](#3.4.2 情景二(不设置参数,指定ID):)

[3.4.3 情景三(不存在的ID):](#3.4.3 情景三(不存在的ID):)

1、存在问题

Flink on Yarn模式启动多个Session会话,使用命令行提交sql文件,默认会提交到最近的一个Yarn Session会话里面。

在flink的bin目录下启动yarn会话的命令如下:

bash 复制代码
yarn-session.sh -nm flink-session-1 -d -s 4 -n 2 -jm 1024 -tm 4096
yarn-session.sh -nm flink-session-2 -d -s 4 -n 2 -jm 1024 -tm 4096
yarn-session.sh -nm flink-session-3 -d -s 4 -n 2 -jm 1024 -tm 4096

1.1 提交指定application的会话

在flink的bin目录下提交sql文件的命令如下:

bash 复制代码
./bin/sql-client.sh embedded     -D yarn.application.id=application_1763460582895_0006    -f /home/bigdata/download/sql/content_is_delete.sql

对应提交的会话是application_1763460582895_0008

1.2 提交application不存在的会话

!!!注意:如果是其他ID,如application_1763460582895_0009,没有报错,仍然是提交到最近存在的一个Yarn会话(这里是application_1763460582895_0008)

在flink的bin目录下提交命令如下:

bash 复制代码
./sql-client.sh embedded     -D yarn.application.id=application_1763460582895_0009    -f /home/bigdata/download/sql/content_is_delete.sql

1.3 Kill 最新的application会话,然后指定application会话提交

Kill最新的application会话如下:

bash 复制代码
yarn application -kill application_1763460582895_0008

在flink的bin目录下提交命令如下:

bash 复制代码
./sql-client.sh embedded     -D yarn.application.id=application_1763460582895_0006    -f /home/bigdata/download/sql/content_is_delete.sql

然后就会出现一下报错:

2、如何解决

重新启动一个Yarn Session会话,查看/tmp目录下生成的临时文件,发现指定的是最新的会话ID

而需要提交到指定application会话则需要在之前的命令中添加参数设置,对应的提交命令如下:

bash 复制代码
./sql-client.sh embedded     -D execution.target=yarn-session      -D yarn.application.id=application_1763460582895_0006     -f /home/bigdata/download/sql/content_is_delete.sql

最主要的是设置"-D execution.target=yarn-session"

然后就能在application_1763460582895_0006的Flink Web UI界面看见之前提交的任务。对应结果如下:

查看最新的application_1763460582895_0009是没有任务提交的,说明使用上述的-D execution.target=yarn-session参数设置可以实现多Yarn Session模式下,将sql文件提交到指定的Yarn Session。

3、补充说明

3.1 默认/tmp目录下指定的最新会话的ID

启动3个Yarn Session会话,默认的/tmp目录下指定的最新会话的ID。

若需要指定会话进行提交,则需要进行前面"-D execution.target=yarn-session"参数的指定。

3.2 修改/tmp目录下的临时缓存文件,不设置参数"-D execution.target=yarn-session"

若将/tmp目录下的临时缓存修改成22,不设置参数"-D execution.target=yarn-session"。那么执行相应的sql任务提交,则会将任务提交到22的Yarn Session会话中。

bash 复制代码
vi .yarn-properties-bigdata
cat /tmp/.yarn-properties-bigdata
bash 复制代码
./sql-client.sh embedded    -D yarn.application.id=application_1763460582895_0020     -f /home/bigdata/download/sql/content_is_delete.sql

3.3 修改/tmp目录下的临时缓存文件,设置参数"-D execution.target=yarn-session"

将/tmp目录下的临时缓存修改成22,设置参数"-D execution.target=yarn-session"。那么执行相应的sql任务提交,则会将任务提交到命令指定的Yarn Session会话中。

bash 复制代码
./sql-client.sh embedded     -D execution.target=yarn-session      -D yarn.application.id=application_1763460582895_0020     -f /home/bigdata/download/sql/content_is_delete.sql

3.4 删除/tmp目录下的临时缓存文件(前面设置的ID为22)

3.4.1 情景一(设置参数,指定ID):

这时候设置了"-D execution.target=yarn-session",然后指定了ID,仍然可以将任务提交到指定会话。

bash 复制代码
rm -rf .yarn-properties-bigdata
ls -la /tmp/.yarn-properties*

出现"ls: 无法访问/tmp/.yarn-properties*: 没有那个文件或目录"则说明删除成功

bash 复制代码
./sql-client.sh embedded     -D execution.target=yarn-session      -D yarn.application.id=application_1763460582895_0020     -f /home/bigdata/download/sql/content_is_delete.sql

同理,删除临时缓存文件,若设置了"-D execution.target=yarn-session",然后指定了ID,仍然可以将任务提交到指定会话。

bash 复制代码
./sql-client.sh embedded     -D execution.target=yarn-session      -D yarn.application.id=application_1763460582895_0022     -f /home/bigdata/download/sql/content_is_delete.sql


./sql-client.sh embedded     -D execution.target=yarn-session      -D yarn.application.id=application_1763460582895_0024     -f /home/bigdata/download/sql/content_is_delete.sql

3.4.2 情景二(不设置参数,指定ID):

删除临时缓存文件,不设置"-D execution.target=yarn-session",仅仅指定了ID,可以将任务提交到指定会话。

bash 复制代码
./sql-client.sh embedded      -D yarn.application.id=application_1763460582895_0022     -f /home/bigdata/download/sql/content_is_delete.sql

因删除临时缓存文件前,ID指定为22。这里删除临时文件之后,将提交任务的命令换成其他ID,同时不设置"-D execution.target=yarn-session",仍然可以将任务提交到指定会话。

bash 复制代码
./sql-client.sh embedded      -D yarn.application.id=application_1763460582895_0020     -f /home/bigdata/download/sql/content_is_delete.sql

同理,将ID设置为24,不设置"-D execution.target=yarn-session",也可以将任务提交到指定会话

bash 复制代码
./sql-client.sh embedded      -D yarn.application.id=application_1763460582895_0024     -f /home/bigdata/download/sql/content_is_delete.sql

3.4.3 情景三(不存在的ID):

因前面1.2提到的提交application不存在的会话,在临时缓存文件存在的情况下,会将任务提交到最新的一个Yarn session会话中。然而这里删除了临时文件,在随便执行一个ID,不设置"-D execution.target=yarn-session"的情况下会出现报错。

bash 复制代码
./sql-client.sh embedded      -D yarn.application.id=application_1763460582895_0021     -f /home/bigdata/download/sql/content_is_delete.sql

同时在随便执行一个ID,设置"-D execution.target=yarn-session"的情况下也会出现报错。

bash 复制代码
./sql-client.sh embedded   -D execution.target=yarn-session   -D yarn.application.id=application_1763460582895_0021     -f /home/bigdata/download/sql/content_is_delete.sql
相关推荐
泡泡以安40 分钟前
【Android逆向工程】第3章:Java 字节码与 Smali 语法基础
android·java·安卓逆向
毕设源码-朱学姐6 小时前
【开题答辩全过程】以 工厂能耗分析平台的设计与实现为例,包含答辩的问题和答案
java·vue.js
Jackeyzhe7 小时前
Flink学习笔记:状态后端
flink
Spring AI学习8 小时前
Spring AI深度解析(9/50):可观测性与监控体系实战
java·人工智能·spring
天天扭码8 小时前
如何实现流式输出?一篇文章手把手教你!
前端·aigc·ai编程
前端 贾公子8 小时前
vue移动端适配方案 === postcss-px-to-viewport
前端·javascript·html
java1234_小锋8 小时前
Spring IoC的实现机制是什么?
java·后端·spring
xqqxqxxq9 小时前
背单词软件技术笔记(V2.0扩展版)
java·笔记·python
GISer_Jing9 小时前
AI营销增长:4大核心能力+前端落地指南
前端·javascript·人工智能
消失的旧时光-19439 小时前
深入理解 Java 线程池(二):ThreadPoolExecutor 执行流程 + 运行状态 + ctl 原理全解析
java·开发语言