Flink on Yarn 模式 TaskManager内存配置
Flink on Yarn 模式 TaskManager内存配置
介绍一下Flink on yarn模式的内存分配情况
内存分布图
内存介绍
内存分为
整个container内存、flink内存。其中内存类型又分为堆内存和堆外内存。
-
- JVM Metaspace :默认256M;
-
- JVM Overhead内存:默认整个container内存的0.1;
最大值为1G,最小值为192M,如果计算出来的内存大小不在此区间范围内,按照最小值/最大值 分配;例如计算的结果为128M,实际按照192M分配;计算结果为1.2G,实际按照1G分配;
- JVM Overhead内存:默认整个container内存的0.1;
-
- Flink Memory = Totoal Memory - JVM Metaspace - JVM Overhead
-
- Total Memory :flink job 启动时,按照参数: -ytm 6144 指定的内存大小(单位M)。如果不指定,按照yarn最小Container分配的内存大小。
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>2048</value>
</property>
-
- Network = Flink Memory *0.1(默认值)
-
- Managed Memory = Flink Memory * 0.4(默认值)
-
- Task off-heap 默认为0;
-
- framework off-heap :默认为128M
计算方式
# 简单执行提交作业
./bin/flink run-application -tyarn-application./MyApplication.jar
# 传入参数提交作业
./bin/flink run-application -t yarn-application \
-Djobmanager.memory.process.size=2048m \
-Dtaskmanager.memory.process.size=8192m \
./MyApplication.jar
# 为进一步节省将Flink jar发送到集群的带宽,可以将Flink jar预上传到YARN能访问的远程存储(如:hdfs),通过使用yarn.provided.lib.dirs配置项实现,如下所示:
./bin/flink run-application -t yarn-application \
-Djobmanager.memory.process.size=2048m \
-Dtaskmanager.memory.process.size=8192m \
-Dyarn.provided.lib.dirs="hdfs://user/remote-flink-dist-dir" \
./MyApplication.jar
# 为进一步节省提交应用程序jar所需的带宽,同样可以将其预上传到HDFS,提交应用程序时指向远程路径/MyApplication.jar即可,如下所示
./bin/flink run-application -t yarn-application \
-Djobmanager.memory.process.size=2048m \
-Dtaskmanager.memory.process.size=8192m \
-Dyarn.provided.lib.dirs="hdfs://user/remote-flink-dist-dir" \
hdfs://user/jars/MyApplication.jar
提交内存设置为 8192 8G
Flink Managed Memory = (8192M * 0.9 -256M) 0.4 = 2.78G
JVM(heap/Non-heap) = (8192M * 0.9 -256M) 0.5 -128 M = 3.3G