背景
计划将之前部署好的flink1.10升级到1.11.2。
主要流程及踩坑
1.从官方下载flink1.11.2的压缩包,选择与业务程序中导入的maven依赖scala版本一致即可(本人选用的是2.11)。
2.修改对应的配置文件(yarn模式下只需配置 flink-conf.yaml, 如果是使用flink自己的资源调度则简单配置masters、workers文件即可 )。flink 1.10与1.11.2的配置项基本没有太多差别,配置参考之前的文档和内容即可。因为这些之前都自己配置好了,基本都没有进行修改。
首次进行设置的话可以参考flink社区提供的入门文档,根据自己情况进行设置。
Apache Flink 零基础入门(三):开发环境搭建和应用的配置、部署及运行
下面是自己配置的基本参数,可以根据自己的集群性能和要求按官方文档进行修改
jobmanager.rpc.address: cdh2
jobmanager.rpc.port: 6123
jobmanager.heap.size: 1024m
taskmanager.memory.process.size: 1024m
taskmanager.numberOfTaskSlots: 8
parallelism.default: 1
high-availability: zookeeper
high-availability.zookeeper.path.root: /flink
task.cancellation.timeout: 0
high-availability.storageDir: hdfs:///flink/ha/
high-availability.zookeeper.quorum: cdh3:2181,cdh4:2181,cdh5:2181
yarn.application-attempts: 10
jobmanager.execution.failover-strategy: region
rest.port: 9250
3.(非必要)添加额外的jar包。在flink1.11之前如果需要将flink的调度依托于hadoop,则需要引入一批额外的jar包到lib目录下来支持flink与hadoop之间的通信。之前进行额外引入的jar包都有(均可在maven仓库中直接搜索找到并进行下载):
flink-shaded-hadoop-3-uber-3.1.1.7.1.1.0-565-9.0.jar
hadoop-yarn-api-3.1.1.3.1.4.0-315.jar
jersey-client-1.9.jar
jersey-core-1.9.jar
jsr311-api-1.1.1.jar
4.配置环境变量
flink1.11已经不需要通过额外引入jar包来支持此功能,但是必须配置YARN_CONF_DIR、HADOOP_CLASSPATH来支持与yarn集群的调度。
进入/etc/profile.d隐藏目录,创建hadoop.sh.并增加如下内容即可:
HADOOP_HOME=/usr/hdp/3.1.4.0-315/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_CLASSPATH='hadoop classpath'
5.使用Per Job cluster模式挂起一个flink任务即可跑路了。flink 使用 yarn资源调度的话 主要有session cluster 和 job cluster两种作业方式:
per Job模式每提交一个任务都会创建一个flink yarn资源调度器(ResourceManager ),一旦job执行完了所有占用的资源都会回收掉,比较适合长时间作业的任务,比如无限数据流的实时计算。
session cluster模式的flink yarn资源管理器(ResourceManager )是复用的,直接在yarn上创建一个flink集群来接受任务。所以在提交任务频繁的情况下,可以节约创建flink yarn资源管理器(ResourceManager )的时间,提升执行效率。适合离线批处理任务。
结合自身集群服务器不大,且全部都是实时计算的特点,这边选择直接使用Per Job cluster模式执行flink任务。
直接在flink/bin路径下,执行./flink run -m yarn-cluster /root/cliu_bi_job/UserCenterCount.jar
可以看到任务已经提交,flink集群已经起来运行了,提交在cdh3上启动的服务。可以收工跑路了。
反思
之前首次安装clouder manage、kafka、flume配置的时候明明踩坑了好多,也花费了不少时间去解决问题。但是都只有十分简单的记录。导致在下次升级或者重装的时候因为没有详细的笔记或记录,导致并没有因为有踩坑经验减少处理的时间。
引申问题
目前根据集群和业务特点选择了Per Job cluster模式提交任务,但是公司有很多需要跑的任务要提交到集群上。使用Per Job cluster模式提交的时候,在哪台服务器启动flink job manager服务是不确定的。导致不同业务的任务随机分配到不同机器上,不方便使用Web UI 查看任务的运行状态。
这个 问题目前还没有找到解决方案。打算找找flink官方的文档,查找一下解决方案。到时候也出一个笔记记录一下。