目录
[1.1 提交指定application的会话](#1.1 提交指定application的会话)
[1.2 提交application不存在的会话](#1.2 提交application不存在的会话)
[1.3 Kill 最新的application会话,然后指定application会话提交](#1.3 Kill 最新的application会话,然后指定application会话提交)
[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
