文章目录
- 一. flink的内存管理
-
- 1.Jobmanager的内存模型
- 2.TaskManager的内存模型
-
- 2.1. 模型说明
- 2.2. 通讯、数据传输方面
- 2.3. 框架、任务堆外内存
- 2.4. 托管内存
- 3.任务分析
- 二. 单个节点的带宽瓶颈
-
- 1. 带宽相关理论
- 2. 使用speedtest-cli 测试带宽
- 3. 任务分析
- 3. 其他工具使用介绍
本文相关讨论
- flink内存对任务性能的影响:通过了解内存模型,了解这些模型都负责那些工作,比如用户代码使用堆,数据通讯使用直接内存等,以便能够根据任务特点针对性调整任务内存;
- 并发与带宽之间的关系,local模式下怎么根据带宽,设置最佳线程数;
- 内存监控相关命令。
任务说明:
使用local模式运行flink sql任务,任务为:从hdfs解析数据到hdfs中的离线任务,其中数据量有4亿,文件数有13个,初始运行参数为:堆内存设为3g、并发设为13,其中运行命令如下:
java -XX:NativeMemoryTracking=summary -Xms3096m -Xmx3096m -cp $FLINK_HOME/lib/chunjun-core.jar:$FLINKX_HOME/bin/:$FLINK_HOME/lib/*:$HADOOP_CLASSPATH \
$CLASS_NAME -job hdfs-hdfs.sql -mode local -jobType sql \
-flinkConfDir $FLINK_HOME/conf \
-flinkLibDir $FLINK_HOME/lib \
-hadoopConfDir $HADOOP_CONF_DIR \
-confProp "{ \"taskmanager.numberOfTaskSlots\":13}"
本例子使用chunjun提交flink任务。
一. flink的内存管理
了解flink内存模型,可以让我们针对任务特点,合理设置内存,在不造成内存浪费的同时,分析出任务性能瓶颈。
1.Jobmanager的内存模型
组成部分 | 配置参数 | 描述 |
---|---|---|
JVM 堆内存 | jobmanager.memory.heap.size |
JobManager 的 JVM 堆内存。框架内存、特殊批处理source、cp、akka通讯(java api实现)。 |
堆外内存 | jobmanager.memory.off-heap.size |
JobManager 的_堆外内存(直接内存或本地内存)_。 |