IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 第一次 flinkx任务分配资源测试 -> 正文阅读

[大数据]第一次 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参数有效

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

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-20 12:33:20  更:2021-10-20 12:34:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:34:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码