第一次 flinkx任务分配资源测试

第一次 flinkx任务分配资源测试,第1张

第一次 flinkx任务分配资源测试

第一次测试分析那些参数生效,第二次测试已经生效的参数

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参数有效

注:如果哪有问题,欢迎评论区留言。你的提问就是对我最大的支持

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4665716.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-06
下一篇 2022-11-06

发表评论

登录后才能评论

评论列表(0条)

保存