flink内存管理机制
所属分类 flink
浏览量 964
大数据应用 大量对象 OutOfMemoryError
实现自己的内存管理,例如Apache Spark的Tungsten项目
减轻框架对JVM垃圾回收机制的依赖,更好的处理大规模数据集
Flink 内存管理
内存分为3个区域
Unmanned Heap
Managed Heap
Network Buffers
启动过程中将堆内存初始化成Memory Pages Pool
将内存全部以二进制数组的方式占用,形成虚拟内存使用空间
新创建的对象序列化成二进制数据的方式存储在内存页面池
完成计算后 将Page置空
JobManager配置
JobManager作用
管理集群资源 接受任务 调度Task 收集任务状态以及管理TaskManager
JobManager本身并不直接参与数据的计算
jobmanager.heap.size JobManager堆内存大小,默认1024MB
TaskManager配置
TaskManager
工作节点 内存配置很重要
https://ci.apache.org/projects/flink/flink-docs-master/docs/deployment/config/
taskmanager.heap.size
默认值为1024M
Yarn集群,取决于Yarn分配给TaskManager Container的内存大小
一般会减掉一部分内存用于Container
taskmanager.jvm-exit-on-oom
默认false,当TaskManager发生内存溢出时,也不会停止
taskmanage.memory.size
设定TaskManager内存大小,默认0
如果不设定 将会使用taskManager.memory.fraction作为内存分配依据
taskmanager.memory.fraction
设定TaskManager堆中除Network Buffers内存后的内存分配比例
该内存主要用于TaskManager任务排序 缓存中间结果等操作
例如,如果设定为0.8,代表TaskManager保留80%内存用于中间结果数据的缓存
剩下20%的内存用于创建用户定义函数中的数据对象存储
该参数只有在taskmanager.manager.size不设定的情况下才生效
taskmanager.memory.off-heap
是否开启堆外内存供Managed Memory或者Network Buffer使用
taskmanager.memory.preallocate
是否在启动TaskManager过程中直接分配TaskManager管理内存
taskmanager.numberOfTaskSlots
每个TaskManager分配的slot的数量
网络缓存优化
Network Buffers内存
缓存分布式数据处理过程中的输入数据
过小 可能导致 Insufficient number of network buffers
设置Network Buffer内存大小两种方式
设定Network Buffer内存数量(过时了)
taskmanager.network.numberOfBuffers
taskmanager.memory.segment-size 默认 32KB
设定Network内存比例(推荐)
taskmanager.network.memory.fraction
JVM 中用于 Network Buffers 的内存比例
taskmanager.network.memory.min
最小的 Network Buffers 内存大小,默认64MB
taskmanager.network.memory.max
最大的 Network Buffers 内存大小,默认1GB
taskmanager.memory.segment-size
内存管理器和 Network 栈使用的 Buffer 大小,默认32KB
上一篇
下一篇
flink dataset groupBy sortBy 实例与说明
flink术语
flink datastream batch mode wordcount实例
为何kafka要去掉zookeeper依赖
flink 运行模式 批处理与流处理模式
BigDecimal 使用注意点