首页  

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 使用注意点