赞
踩
JobManager 比较简单, 主要介绍一下 TaskManager。
部分配置文件 flink-conf.yaml
jobmanager.rpc.address: bigdata1 # The RPC port where the JobManager is reachable. jobmanager.rpc.port: 6123 # The total process memory size for the JobManager. # # Note this accounts for all memory usage within the JobManager process, including JVM metaspace and other overhead. jobmanager.memory.process.size: 2048m # The total process memory size for the TaskManager. # # Note this accounts for all memory usage within the TaskManager process, including JVM metaspace and other overhead. taskmanager.memory.process.size: 14g # ⭐️⭐️⭐️ # taskmanager.memory.task.heap.size: 10g taskmanager.memory.managed.size: 1g # To exclude JVM metaspace and overhead, please, use total Flink memory size instead of 'taskmanager.memory.process.size'. # It is not recommended to set both 'taskmanager.memory.process.size' and Flink memory. # # taskmanager.memory.flink.size: 1280m # The number of task slots that each TaskManager offers. Each slot runs one parallel pipeline. taskmanager.numberOfTaskSlots: 3 # The parallelism used for programs that did not specify and other parallelism. parallelism.default: 1
① taskmanager.memory.framework.heap.size=128MB ② (Total Flink Memory) – (①Framework Heap)– (③Managed Memory) – (④Task off-heap memory) – (⑥Network Memory) = (14GB) - (256MB) - (128GB) - (1GB) - (1GB) = 10.5GB ③ taskmanager.memory.managed.size =128MB 默认: taskmanager.memory.managed.fraction=0.4 Total Flink Memory × fraction = (14GB-256MB-1GB) × 0.4 = 5.10GB ④ taskmanager.memory.framework.off-heap.size =128MB ⑤ ⑥ Total Flink Memory × fraction = (14Gb-256MB) × 0.1 = 1.38 GB > max 1GB --> 1GB taskmanager.memory.network.min:默认为64MB taskmanager.memory.network.max:默认为1gb taskmanager.memory.network.fraction:默认为0.1 ⑦ taskmanager.memory.jvm-metaspace.size = 256MB ⑧ Total Flink Memory × fraction = (14Gb-256MB) × 0.1 = 1.38 GB > max 1GB --> 1GB taskmanager.memory.jvm-overhead.min:默认为192MB, taskmanager.memory.jvm-overhead.max:默认为1GB taskmanager.memory.jvm-overhead.fraction:默认为0.1
Framework Heap 其实是为 Task Executor 本身所配置的堆内存大小,Task Executor 本身也是一个 Java 进程。
Framework Heap 是 Flink 框架保留的,是不会用来执行 Task 的。该堆的大小由 taskmanager.memory.framework.heap.size
参数控制,它的运行所需资源比较轻量级,默认为128M。
Task Heap Memory 是专门用于执行 Flink 任务的堆内存空间。该堆的大小由taskmanager.memory.task.heap.size
参数指定。这个参数的默认为:
(Total Flink Memory) – (Framework Heap)– (Managed Memory) – (Task off-heap memory) – (Network Memory)
Managed Memory 是由 Flink 直接管理的 off-heap 内存,它主要用于排序、哈希表、中间结果缓存、RocksDB的backend。其实它是Task Executor管理的off-heap内存。它可以由taskmanager.memory.managed.size
参数直接配置指定,默认是不配置的。默认是通过
taskmanager.memory.managed.fraction
配置的因子(默认0.4)来设置Managed off-heap memory
,默认为 Total Flink Memory 的 40% 。
如果不设置 taskmanager.memory.managed.size
, 则 Managed Memory 计算如下:
taskmanager.memory.managed.size =128MB
默认: taskmanager.memory.managed.fraction=0.4
Total Flink Memory × fraction = (14GB-256MB-1GB) × 0.4 = 5.10GB
Task Executor 保留的 off-heap memory ,不会分配给任何slot。可以通过taskmanager.memory.framework.off-heap.size
参数指定,默认为128M。Framework 所保留的内存,一般是不建议调整的。
Task Executor执行的Task所使用的堆外内存。如果在Flink应用的代码中调用了Native的方法,需要用到off-heap内存,这些内存会分配到Off-heap堆外内存中。可以通过指定taskmanager.memory.task.off-heap.size
来配置,默认为0。如果代码中需要调用Native Method并分配堆外内存,可以指定该参数。一般不使用,所以大多数时候可以保持0。
Network Memory使用的是Directory memory,在Task与Task之间进行数据交换时(shuffle),需要将数据缓存下来,缓存能够使用的内存大小就是这个Network Memory。它由是三个参数决定:
taskmanager.memory.network.min
:默认为64MB
taskmanager.memory.network.max
:默认为1gb
taskmanager.memory.network.fraction
:默认为0.1
Network Memory 有两种配置方式,
taskmanager.memory.network.fraction
参数,也就是Total Flink Memory的百分比,默认为Total Flink Meory 的10%。taskmanager.memory.network.min
和taskmanager.memory.network.max
指定 shuffle 缓存在 min, max 之间的内存空间。如果使用fraction计算出来的Network Meory超出min-max的范围,那么以min-max为准。如果配置的min和max是一样的值,就使用固定的内存大小。以上面图示的例子:当前的Total Flink Meory为:(14Gb-256MB) ,而 taskmanager.memory.network.fraction
为0.1,min为64MB,max为1GB,所以好Network Meory 大于 max ,所以最 max ,为 1GB。
计算公式如下:
Total Flink Memory × fraction = (14Gb-256MB) × 0.1 = 1.38 GB > max 1GB --> 1GB
从JDK 8开始,JVM把永久代拿掉了。类的一些元数据放在叫做Metaspace的Native Memory中。在Flink中的JVM Metaspace Memory也一样,它配置的是Task Manager JVM的元空间内存大小。通过taskmanager.memory.jvm-metaspace.size参数配置,默认为256MB。
保留给JVM其他的内存开销。例如:Thread Stack、code cache、GC回收空间等等。和Network Memory的配置方法类似。它也由三个配置决定:
taskmanager.memory.jvm-overhead.min
:默认为192MB,
taskmanager.memory.jvm-overhead.max
:默认为1GB
taskmanager.memory.jvm-overhead.fraction
:默认为0.1。
参考文献:
参考文献:
https://blog.csdn.net/ChinaPoison/article/details/112163548
https://ci.apache.org/projects/flink/flink-docs-release-1.12/zh/deployment/config.html
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。