flink -on-yarn

  • 摘要
  • 一:Session Mode 运行任务
  • 1.1Session Mode 建立一个flink集群 有两种模式:
  • 1.2 Session Mode 运行一个任务
  • 二: Per-Job Mode运行任务
  • 2.1 Per-Job Mode 启动任务
  • 2.2:Per-Job Mode停止任务
  • 3:Application Mode 运行任务
  • 3.1 运行
  • 3.2停止运行



文章写的比较急,但是都是干货。

摘要

在读下面的文章之前你需要了解:flink三种调度 环境变量要加上:export HADOOP_CLASSPATH=`hadoop classpath`

yarn自动关闭了flink flinkyarnsessioncli 的关闭_java

一:Session Mode 运行任务

Session Mode运行jar有两个过程,

  • 一是在yarn建立一个flink集群.
  • 二:集群建立成功之后,提交任务.
1.1Session Mode 建立一个flink集群 有两种模式:
  • 附加模式attached mode (default):
    client提交任务到flink-cluster上,之后客户端会继续运 行,并且会追踪集群状态.如果集群失败,则客户端会显示错误信息,如果客户端关闭,也会向flink-cluster发送关闭的信号,关闭集群.
    下面实战一下,下面的操作假定你已经拥有了hadoop以及flink:
#进入flink安装目录
     cd  /home/penggan/flink/flink-1.13.0
      #在 yarn上建立flink-cluster
    ./bin/yarn-session.sh

yarn自动关闭了flink flinkyarnsessioncli 的关闭_yarn自动关闭了flink_02

注意图片上的红色标注,从上往下,第一个箭头指定的是yarn显示的flink-cluster的 id,第二个箭头指的是flink-cluster的web页面,下面分别是hadoop 的页面和flink-cluster的web页面:

yarn自动关闭了flink flinkyarnsessioncli 的关闭_大数据_03


yarn自动关闭了flink flinkyarnsessioncli 的关闭_hadoop_04

接下来按住:ctrl+c 停止控制台会发现,hadoop页面中的application 已经被干掉,并且flink-cluster也会停止,这就是附加模式,通过上面的操作可以知道附加模式就是启动flink-cluster的客户端的生命周期和生成的flink-cluster生命周期是一致的,这里有个注意的地方,在这种模式下,客户端的停止会导致整个clink-cluster的application任务停止,因此这种模式不推荐生产使用.当然测试很方便

  • 静默模式detached mode
    也即后台运行的模式,客户端将建立命令提交之后就会返回,yarn上的flink-cluster会在后台存活.
    下面实战一下:
#启动
./bin/yarn-session.sh --detached

结果看下图,注意对比附加模式启动成功图片.

yarn自动关闭了flink flinkyarnsessioncli 的关闭_大数据_05


对比图片发现,后台启动的方式控制台输出了有意思的东西,值得主义的是下面这些输出:

2021-08-05 16:31:16,966 INFO  org.apache.flink.yarn.cli.FlinkYarnSessionCli                [] - The Flink YARN session cluster has been started in detached mode. In order to stop Flink gracefully, use the following command:
$ echo "stop" | ./bin/yarn-session.sh -id application_1625201070945_0101
If this should not be possible, then you can also kill Flink via YARN's web interface or via:
$ yarn application -kill application_1625201070945_0101
Note that killing Flink might not clean up all job artifacts and temporary files.

意思就是说,后台模式,如果你想关闭flink-cluster集群最好用:echo “stop” | ./bin/yarn-session.sh -id application_xxx
如果没关掉可以用:yarn application -kill application_xxx
但是第二种方式可能会导致一些文件清理不干净,所以还是推荐第一种关闭方式.
*

1.2 Session Mode 运行一个任务
./bin/flink run  -Dyarn.application.id=application_1625201070945_0103  ./examples/streaming/TopSpeedWindowing.jar

application_id 就是flink-cluster的id,意思是,这个jar包在指定的id的flink-cluster上运行,因为yarn上可以运行多个flink-cluster.

下面是运行打印的日志图片:

yarn自动关闭了flink flinkyarnsessioncli 的关闭_hadoop_06


可以看到jar包启动之后控制台会返回一个jobID,这就是当前任务的id,注意区别application_id, application_id 是flink-cluster的id, flink-cluster运行在hadoop上, job运行在flink-cluster上.

停止集群如下:

1. echo "stop" | ./bin/yarn-session.sh -id application_xxxx

2. /bin/yarn-session.sh -id application_XXXX_YY 的话会从新将后台模式转成前台模式,此时如果你键盘:ctrl+c的话
也会杀掉集群

或者:

./bin/flink cancel -t yarn-per-job -Dyarn.application.id=application_xxx  jobId
注意:这种方式只会杀死任务,不会杀死flink-cluster集群,这一点要区别Per-Job Mode 模式.

二: Per-Job Mode运行任务

每作业集群模式将在YARN上启动一个Flink集群,然后在本地运行提供的应用程序jar,最后将JobGraph提交给YARN上的JobManager。如果传递"–detached"参数,客户端将在提交任务完成后会停止.且 The YARN cluster will stop once the job has stopped.

2.1 Per-Job Mode 启动任务
./bin/flink run -t yarn-per-job --detached ./examples/streaming/TopSpeedWindowing.jar

yarn自动关闭了flink flinkyarnsessioncli 的关闭_yarn自动关闭了flink_07


上面的箭头,第一个是clink-cluster在yarn上的id,第二个是job的id.

2.2:Per-Job Mode停止任务
echo "stop" | ./bin/yarn-session.sh -id application_xxx

或者

./bin/flink cancel -t yarn-per-job -Dyarn.application.id=application_xxx   jobId
这种方式

Per-Job Mode 模式下flink-cluster集群的生命周期和job的生命周期是同步的,曲线job的时候flink-cluster也会结束掉. 多说一句这种模式只能运行一个job.

3:Application Mode 运行任务

3.1 运行
./bin/flink run-application -t yarn-application ./examples/streaming/TopSpeedWindowing.jar
3.2停止运行
echo "stop" | ./bin/yarn-session.sh -id application_1625201070945_0115
或者:
./bin/flink list -t yarn-application -Dyarn.application.id=application_XXXX_YY
# Cancel running job
./bin/flink cancel -t yarn-application -Dyarn.application.id=application_XXXX_YY <jobId>