Flink作业deploy
https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/deployment/overview/
https://nightlies.apache.org/flink/flink-docs-release-1.13/zh/docs/deployment/resource-providers/yarn/
https://nightlies.apache.org/flink/flink-docs-release-1.13/zh/docs/deployment/cli/
命令汇总
standalone模式
# 启动命令
flink run \
-m doitedu01:8081 \ # -m 指定jobmanager的位置 可省略
-p 4 \ # -p 指定并行度
-c wordcount.StreamWordCount \
/root/jars/myflink.jar \
--host bigdata111 --port 6666 #自定义参数
#查看当前运行的任务:
flink list
#查看所有的任务:
flink list --all
#任务取消:
flink cancel jobid
application模式
./bin/flink run-application -t yarn-application \
-Djobmanager.memory.process.size=2048m \
-Dtaskmanager.memory.process.size=4096m \
-Dyarn.provided.lib.dirs="hdfs://myhdfs/remote-flink-dist-dir" \
hdfs://myhdfs/jars/MyApplication.jar
# List running job on the cluster
./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>
Session模式
# 通过flink命令启动flink集群**
bin/yarn-session.sh -n 2 -s 2 -jm 1024 -tm 1024 -nm test -d
参数说明如下:
-n,--container <arg> 表示分配容器的数量(也就是 TaskManager 的数量)。
-D <arg> 动态属性。
-d,--detached 在后台独立运行。
-jm,--jobManagerMemory <arg>:设置 JobManager 的内存,单位是 MB。
-nm,--name:在 YARN 上为一个自定义的应用设置一个名字。
-q,--query:显示 YARN 中可用的资源(内存、cpu 核数)。
-qu,--queue <arg>:指定 YARN 队列。
-s,--slots <arg>:每个 TaskManager 使用的 Slot 数量。
-tm,--taskManagerMemory <arg>:每个 TaskManager 的内存,单位是 MB。
-z,--zookeeperNamespace <arg>:针对 HA 模式在 ZooKeeper 上创建 NameSpace。
-id,--applicationId <yarnAppId>:指定 YARN 集群上的任务 ID,附着到一个后台独立运行的 yarn session 中
# 提交任务
/flink run -c com.dylan.wc.StreamWordCount -p 1 /usr/local/xxx.jar
# 提交任务-指定到另一个YARN cluster ??
/bin/flink run -t yarn-session \
-Dyarn.application.id=application_XXXX_YY \
./examples/streaming/TopSpeedWindowing.jar
# 可以使用以下命令重新连接到一个YARN会话 ??
./bin/yarn-session.sh -id application_XXXX_YY
#停止任务
yarn application --kill application_1577588252906_0001
or
echo "stop" | ./bin/yarn-session.sh -id application_XXXXX_XXX
rm -rf /tmp/.yarn-properties-<username>
Yarn-Per-Job模式
./bin/flink run \
-d \ # --detached 后台运行
-t yarn-per-job \ # 指定yarn的Per-job模式,-t等价于-Dexecution.target
-Dyarn.application.name=consumerDemo \ # yarn应用的自定义name
-Dparallelism.default=3 \ # 未指定并行度时的默认并行度值, 该值默认为1
-Djobmanager.memory.process.size=2048mb \ # JobManager进程的内存
-Dtaskmanager.memory.process.size=2048mb \ # TaskManager进程的内存
-Dtaskmanager.numberOfTaskSlots=2 \ # 每个TaskManager的slot数目, 最佳配比是和vCores保持一致
-Denv.java.opts="-Dfile.encoding=UTF-8" \ # 防止日志中文乱码
-Drest.flamegraph.enabled=true \ # 支持火焰图, Flink1.13新特性, 默认为false, 开发和测试环境可以开启, 生产环境建议关闭
# 指定savepoint地址 没有请取消
--fromSavepoint hdfs://192.168.31.201:8020/test/checkpoint_test/savepoint-e28bdd-ef7febad087e \
-c xxxx.MainClass \ # 入口类
xxxx.jar # 提交Job的jar包
# List running job on the cluster
# 通过yarnApplicationID 查FlinkJobID
./bin/flink list -t yarn-per-job -Dyarn.application.id=${yarnApplicationID}
# 使用cancel退出任务:此时无法指定savepoint
./bin/flink cancel \
-t yarn-per-job \
-Dyarn.application.id=${YarnApplicationID} \ # Yarn的ApplicationID值, 可以通过Yarn的webUI直接查看
${FlinkJobID} # Flink的JobID, 可以通过Yarn找到Flink的WebUI进行查看
# 使用stop退出:可以指定savepoint的存放地址
./bin/flink stop -t yarn-per-job -Dyarn.application.id=${YarnApplicationID} \
--savepointPath hdfs://192.168.31.201:8020/test/checkpoint_test \
${FlinkJobID}
Per Job Cluster
# 提交任务
flink run –m yarn-cluster -yn 3 -ys 3 yyy -yjm 1024 -ytm 1024 -c com.StreamWordCount /usr/local/xxx.jar
# -m jobmanager的地址
# -yn,--container <arg> 表示分配容器的数量,也就是 TaskManager 的数量。
# -d,--detached:设置在后台运行。
# -yjm,--jobManagerMemory<arg>:设置 JobManager 的内存,单位是 MB。
# -ytm,--taskManagerMemory<arg>:设置每个 TaskManager 的内存,单位是 MB。
# -ynm,--name:给当前 Flink application 在 Yarn 上指定名称。
# -yq,--query:显示 yarn 中可用的资源(内存、cpu 核数)
# -yqu,--queue<arg> :指定 yarn 资源队列
# -ys,--slots<arg> :每个 TaskManager 使用的 Slot 数量。
# -yz,--zookeeperNamespace<arg>:针对 HA 模式在 Zookeeper 上创建 NameSpace
# -yid,--applicationID<yarnAppId> : 指定 Yarn 集群上的任务 ID,附着到一个后台独 立运行的 Yarn Session 中。
# 停止任务
yarn application --kill application_1577588252906_0001
rm -rf /tmp/.yarn-properties-root
Flink任务提交流程-yarn模式
Flink任务提交后,Client向HDFS上传Flink的Jar包和配置,
之后向Yarn ResourceManager提交任务,
ResourceManager分配Container资源并通知对应的NodeManager启动ApplicationMaster,
ApplicationMaster启动后加载Flink的Jar包和配置构建环境,然后启动JobManager,
之后ApplicationMaster向ResourceManager申请资源启动TaskManager,
ResourceManager分配Container资源后,由ApplicationMaster通知资源所在节点的NodeManager启动TaskManager,
NodeManager加载Flink的Jar包和配置构建环境并启动TaskManager,
TaskManager启动后向JobManager发送心跳包,并等待JobManager向其分配任务。
deply模式的演进
演进
在Flink 1.10版本中提供了3种会话模式:Yarn会话模式、K8s会话模式、Standalone
Flink 1.11 引入了另外一种部署选项 Application Mode, 该模式允许更加轻量级,可扩展的应用提交进程,将之前客户端的应用部署能力均匀分散到集群的每个节点上。
区别
Session模式的集群,一个集群中运行多个作业。适合执行时间短且频繁执行的任务。
Per-Job模式的集群,一个集群只运行一个作业,作业执行完毕则集群销毁。适合长周期执行的任务,集群异常影响范围小
Application Mode, 该模式允许更加轻量级,可扩展的应用提交进程,将之前客户端的应用部署能力均匀分散到集群的每个节点上。
各deply模式介绍
Session模式
Session 模式假定已经存在一个集群,并任何的提交的应用都在该集群里执行。因此会导致资源的竞争。该模式的优势是你无需为每一个提交的任务花费精力去分解集群。但是,如果Job异常或是TaskManager 宕掉,那么该TaskManager运行的其他Job都会失败。除了影响到任务,也意味着潜在需要更多的恢复操作,重启所有的Job,会并发访问文件系统,会导致该文件系统对其他服务不可用。此外,单集群运行多个Job,意味着JobManager更大的负载。这种模式适合启动延迟非常重要的短期作业。
在Session 模式下,集群生命周期独立于集群上运行的任何Job,并且集群上运行的所有Job共享其资源。
Yarn-Per-Job模式
在Per-Job模式下,集群管理器框架(例如YARN或Kubernetes)用于为每个提交的Job启动一个 Flink 集群。Job完成后,集群将关闭,所有残留的资源(例如文件)也将被清除。此模式可以更好地隔离资源,因为行为异常的Job不会影响任何其他Job。另外,由于每个应用程序都有其自己的JobManager,因此它将记录的负载分散到多个实体中。考虑到前面提到的Session模式的资源隔离问题,Per-Job模式适合长期运行的Job,这些Job可以接受启动延迟的增加以支持弹性。
Per-Job模式选择为每个提交的Job承担拆分集群的费用,以提供更好的资源隔离保证,因为资源不会在Job之间共享。在这种情况下,集群的生命周期将与job的生命周期绑定在一起。
Application模式
现在这些平台遇到一个大问题是部署服务是一个消耗资源比较大的服务,并且很难计算出实际资源限制。比如,如果我们取负载的平均值,则可能导致部署服务的资源真实所需的值远远大于限制值,最坏的情况是在一定时间影响所有的线上应用。但是如果我们将取负载的最大值,又会造成很多不必要的浪费。基于此,Flink 1.11 引入了另外一种部署选项 Application Mode, 该模式允许更加轻量级,可扩展的应用提交进程,将之前客户端的应用部署能力均匀分散到集群的每个节点上。