FlinkX1.10 设置-confProp,最终测试得出结论:
说明-confProp的jobmanager.memory.mb参数有效 ,读取flink-conf.Prop的jobmanager.heap.size参数无效
说明-confProp的taskmanager.memory.mb参数未生效 ,读取flink-conf.Prop的taskmanager.memory.mb参数有效
说明-confProp的parallelism.default参数未生效,读取flink-conf.Prop的parallelism.default参数也没生效(取消)
说明-confProp的taskmanager.slots参数未生效 ,读取flink-conf.Prop的taskmanager.slots参数有效
针对以上的情况,使用已生效的参数,基于confProp配置的生效就只有jobmanager,通过设置json内的speed.channel可以设置parallelism
yarn 配置
yarn.scheduler.minimum-allocation-mb=1G yarn.scheduler.minimum-allocation-vcores=1 yarn.scheduler.maximum-allocation-mb=12G yarn.scheduler.maximum-allocation-vcores=12
Flink配置
jobmanager.rpc.address: server001 jobmanager.rpc.port: 6123 jobmanager.heap.size: 1024m taskmanager.memory.process.size: 1024m taskmanager.numberOfTaskSlots: 1 parallelism.default: 2
计算公式
Taskmanager数 = ceil(Parallelism数 / Slot 数)
Running Containers = Jobmanager Container + Taskmanager数 * Taskmanger Container
Allocated CPU VCores = Taskmanger数 * Slot数 + yarn minimum vcores(Jobmanager) = Parallelism数 + yarn minimum vcores(Jobmanager)
Allocated Memory MB = yarn minimum mb(Jobmanager) + Taskmanager分配内存(或者yarn minimum mb) * Taskmanager数
我的理解:
yarn perjob任务启动,必然有jobmanager container,所以总containers,总CPU,总内存,都要加上一个container最少分配的资源,也就是yarn.scheduler.minimum-allocation-mb=1G
和yarn.scheduler.minimum-allocation-vcores=1 ,每启动一个taskmanager container,就先分配最小的资源,在根据用户实际的配置申请相应的资源
Flinkx测试开始 测试一,默认配置
1. 执行Flink1.10 任务,按上面的配置查看yarn资源分配效果,方便执行FlinkX任务时辨别资源分配是否生效。
jobmanager.heap.size: 1024m taskmanager.memory.process.size: 1024m taskmanager.numberOfTaskSlots: 1 parallelism.default: 2 切换到hdfs账号 flink run -m yarn-cluster -ynm perjobtest $Flink_HOME/examples/batch/WordCount.jar --input hdfs://server001:8020/wc.txt --output hdfs://server001:8020/output/wcresult1.txt
按上面的配置,预知资源分配应该是2个taskmanger,3个containers,3核CPU,3G内存
2. FlinkX任务效果
/usr/local/src/flinkx-1.10/bin/flinkx -mode yarnPer -job /usr/local/src/flinkx-1.10/job/mysql2hive.json -pluginRoot $FlinkX_HOME/syncplugins -flinkconf $Flink_HOME/conf -flinkLibJar $Flink_HOME/lib -yarnconf $HADOOP_HOME/etc/hadoop -queue root.default
不正常,只有一个taskmanager
测试二,修改jobmanager.heap.size=3072m
1. 修改flink-conf.yaml配置中的参数
jobmanager.heap.size: 3072m taskmanager.memory.process.size: 1024m taskmanager.numberOfTaskSlots: 1 parallelism.default: 2 切换到hdfs账号 flink run -m yarn-cluster -ynm perjobtest $Flink_HOME/examples/batch/WordCount.jar --input hdfs://server001:8020/wc.txt --output hdfs://server001:8020/output/wcresult1.txt
按上面的配置,预知资源分配应该是2个taskmanager,3个containers,3核CPU,内存应该是5G
正常,Flink任务运行正常,3072+2/1*1024=5120,5G内存正常
2. flinkx任务默认启动,是否读取flink-conf.yaml配置
/usr/local/src/flinkx-1.10/bin/flinkx -mode yarnPer -job /usr/local/src/flinkx-1.10/docs/example/stream_stream.json -queue root.default
不正常,Flinkx不指定confProp时,默认读取flink-conf.yaml配置,看yarn上的资源情况,说明读取flink-conf.Prop的jobmanager.heap.size参数无效
3. flinkx任务添加-confProp "{"jobmanager.memory.mb":3072}"
/usr/local/src/flinkx-1.10/bin/flinkx -mode yarnPer -job /usr/local/src/flinkx-1.10/docs/example/stream_stream.json -queue root.default -confProp "{"jobmanager.memory.mb":3072}"
正常,jobmanager.memory.mb内存对的上 ,由于Flinkx不能读取Flink的parallelism,slot参数,所以按默认数1来计算,也就生成了一个taskmanager,所以containers=2,使用内存3072+1024=4096,综上所诉,说明-confProp的jobmanager.memory.mb参数有效 ,读取flink-conf.Prop的jobmanager.heap.size参数无效
测试三,初始化配置后,修改taskmanager.memory.process.size=2048m
1. 修改flink-conf.yaml配置中的参数
jobmanager.heap.size: 1024m taskmanager.memory.process.size: 2048m taskmanager.numberOfTaskSlots: 1 parallelism.default: 2 切换到hdfs账号 flink run -m yarn-cluster -ynm perjobtest $Flink_HOME/examples/batch/WordCount.jar --input hdfs://server001:8020/wc.txt --output hdfs://server001:8020/output/wcresult1.txt
按上面的配置,预知资源分配应该是2个taskmanager,3个containers,3核CPU,内存应该是5G
正常,2个taskmanager,2*2048+1024=5120,5G内存正常
2. flinkx任务默认启动,是否读取flink-conf.yaml配置
/usr/local/src/flinkx-1.10/bin/flinkx -mode yarnPer -job /usr/local/src/flinkx-1.10/docs/example/stream_stream.json -queue root.default
不正常,只有一个taskmanager,按一个taskmanager算内存正常,说明读取flink-conf.yaml的taskmanager.memory.mb配置生效
3.Flinkx任务添加-confProp "{"taskmanager.memory.mb":3072}"
/usr/local/src/flinkx-1.10/bin/flinkx -mode yarnPer -job /usr/local/src/flinkx-1.10/docs/example/stream_stream.json -queue root.default -confProp "{"taskmanager.memory.mb":3072}"
不正常,按理内存应该是1024+2/1*3072=7168m,所以taskmanager个数和总使用内存都不正常,说明-confProp的taskmanager.memory.mb未生效 ,读取flink-conf.Prop的taskmanager.memory.mb参数有效
测试四,初始化配置后,修改parallelism.default=3
1. 修改flink-conf.yaml配置中的参数,重启hadoop
jobmanager.heap.size: 1024m taskmanager.memory.process.size: 1024m taskmanager.numberOfTaskSlots: 1 parallelism.default: 3 切换到hdfs账号 flink run -m yarn-cluster -ynm perjobtest $Flink_HOME/examples/batch/WordCount.jar --input hdfs://server001:8020/wc.txt --output hdfs://server001:8020/output/wcresult1.txt
按上面的配置,预知资源分配应该是3个taskmanager,4个containers,4核CPU,4G内存
正常,生成3个taskmanager
2. flinkx任务默认启动,是否读取flink-conf.yaml配置
/usr/local/src/flinkx-1.10/bin/flinkx -mode yarnPer -job /usr/local/src/flinkx-1.10/docs/example/stream_stream.json -queue root.default
不正常,只有一个taskmanager
3. flinkx任务添加-confProp "{"parallelism.default":5}"
/usr/local/src/flinkx-1.10/bin/flinkx -mode yarnPer -job /usr/local/src/flinkx-1.10/docs/example/stream_stream.json -queue root.default -confProp "{"parallelism.default":5}"
不正常,按理应该是5/1=5个taskmanager,但还是只有一个taskmanager。说明flinkx的-confProp的parallelism.default参数未生效,读取flink-conf.Prop的parallelism.default参数也没生效
测试五,修改参数parallelism.default=4 和 taskmanager.numberOfTaskSlots=2
1. 修改flink-conf.yaml配置中的参数,重启hadoop
jobmanager.heap.size: 1024m taskmanager.memory.process.size: 1024m taskmanager.numberOfTaskSlots: 2 parallelism.default: 4 切换到hdfs账号 flink run -m yarn-cluster -ynm perjobtest $Flink_HOME/examples/batch/WordCount.jar --input hdfs://server001:8020/wc.txt --output hdfs://server001:8020/output/wcresult1.txt
按上面的配置,预知资源分配应该是2个taskmanager,3个containers,5核CPU,3G内存
正常,生成2个taskmanager,cpu数= taskmanager数 * slot数 + 1 = 5个
2. flinkx任务默认启动,是否读取flink-conf.yaml配置
/usr/local/src/flinkx-1.10/bin/flinkx -mode yarnPer -job /usr/local/src/flinkx-1.10/docs/example/stream_stream.json -queue root.default
不正常,还是只有一个taskmanger。cpu数有点奇怪,slot读取正常为2,parallelism不正常为1,cpu数=taskmanger数 * slot数 = 1 * 2 +1 =3
3. flinkx任务添加-confProp "{"taskmanager.slots":1}"
/usr/local/src/flinkx-1.10/bin/flinkx -mode yarnPer -job /usr/local/src/flinkx-1.10/docs/example/stream_stream.json -queue root.default -confProp "{"taskmanager.slots":1}"
不正常,按理是4/1=4个taskmanger,但还是只有一个taskmanager。说明-confProp的taskmanager.slots未生效 ,读取flink的taskmanager.slots参数有效
注:如果哪有问题,欢迎评论区留言。你的提问就是对我最大的支持
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)