本人比较喜欢折腾 有新的不弄旧的 不知道这个习惯好不好 废话不说来记录下今天踩的坑

1.最大的坑 flink 1.8版本之后默认包里面没有了hadoop相关的连接jar 由于版本很新所以在阿里的镜像库里面没有找到然后从网友那里获得这里也免费奉上:flink-shaded-hadoop-3-uber-3.1.1.7.1.1.0-565-9.0.jar

https://pan.baidu.com/s/1Jpm0v05iIS_tMmn2TqnqyA(提取密码:1cg6 )

然后将包放到${FLINK_HOME}/lib下面

2.第一个中on yarn 的情况(Flink Session (Session-Cluster))

1先启动 bin/yarn-session.sh -nm wordCount -n 2 申请yarn 资源 然后可以看下图查询启动是否成功

使用flink自带的批处理文件:

flink run -yid application_1615176025662_0007 /opt/flink/flink/examples/batch/WordCount.jar

其中 yid 后边是启动yarn 的id

flink指定yarn queue flink yarn提交参数_hadoop


ps.如果报错Flink on yarn Couldn’t deploy Yarn cluster或者The YARN application unexpectedly switched to state FAIL 可以查看我的Hadoop安装那里有讲。

内存集中管理模式:在Yarn中初始化一个Flink集群,开辟指定的资源,之后我们提交的Flink Jon都在这个Flink yarn-session中,也就是说不管提交多少个job,这些job都会共用开始时在yarn中申请的资源。这个Flink集群会常驻在Yarn集群中,除非手动停止。
在yarn上启动一个守护进程,用于启动多个job,即启动一个application master 用来管理多个job
此种模式分为两步:yarn-session.sh(开辟资源)+flink run(提交任务)
./yarn-session.sh -n 4 -jm 1024 -tm 5120 -s 5 -nm yarn-session-jobs -d
参数说明:

-n : 指定number of task manager,指定taskmanager个数
-jm: jobmanager所占用的内存数,单位为MB
-tm: 指定每个taskmanager所占用的内存,单位为MB
-s: 指定每个taskmanager可使用的cpu核数
-nm: 指定Application的名称
-d : 后台启动,session启动后,进程关闭
启动流程说明:

启动session 后,yarn首先会分配一个Container,用于启动APP master和jobmanager, 所占用内存为-jm指定的内存大小,cpu为1核
没有启动job之前,jobmanager是不会启动taskmanager的(jobmanager会根据job的并行度,即所占用的slots,来动态的分配taskmanager)
提交任务到APP master
./flink run -p 3 -yid application_id -d -c com.xxx ~/jar/xxx-1.0-SNAPSHOT.jar用于启动一个job到指定的APP master中
注:job参数要写在-c之前,不然指定参数不起作用

参数说明:

-p:指定任务的并行度,如果你在程序代码中指定了并行度的话,那么此处的并行度参数不起作用
-yid:指定任务提交到哪一个application—id,默认是提交到本节点最新提交的一个application
-c: job的主入口 + jar path

注意:**如果遇到1.Call From hadoop01/172.16.18.133 to hadoop01:8020 failed on connection exception: java.net.ConnectException: 拒绝接; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
的情况 检查下Hadoop 配置文件 core-site.xml fs.defaultFS hdfs://hadoop20:8020 后边修改成 8020 即可
2.org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory /user/root/.flink/application_1615350746988_0001. Name node is in safe mode 可能是刚启动 安全模式没有接触 或者是hdfs 出现问题查看下是否因为丢失块太多 或者磁盘满了等因素 造成的安全模式
**
3.Flink run (Per-Job-Cluster)
启动一个单独的job提交到yarn集群上,即单job单session,实现资源的完全隔离。
启动job的命令跟yarn-session 中有差异 ,通过指定 -m yarn-cluster,参数较session都带有-y
//flink run -m yarn-cluster -yn 2 -yjm 1024 -ytm 1024 /opt/flink/flink/examples/batch/WordCount.jar
-yn 我启动的时候报错去掉后可以使用不知道是不是版本的问题

./flink run \
-m yarn-cluster \
-yn 2 \
-yjm 1024  \
-ytm 3076 \ 
-p 2 \
-ys 3 \
-yD name=hadoop \
-ynm RTC_KB_FLINK_TEST \
-yqu rt_constant \
-c com.kb.rt.Test02 ~/jar/kb-1.0-SNAPSHOT.jar
参数说明:

-m :yarn-cluster,代表启动单session提交单一job
-yn:taskmanager个数
-yjm:jobmanager的内存占用
-ytm:每个taskmanager的内存占用
-ys: 每个taskmanager可使用的CPU核数
-ynm:application 名称
-yqu:指定job的队列名称
-c: 程序主入口+ jar path
-p: 指定任务的并行度
-yD: 动态参数设置