【大数据】Flink 内存管理(四):TaskManager 内存分配(实战篇)

这篇具有很好参考价值的文章主要介绍了【大数据】Flink 内存管理(四):TaskManager 内存分配(实战篇)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Flink 内存管理》系列(已完结),共包含以下 4 篇文章:

  • Flink 内存管理(一):设置 Flink 进程内存
  • Flink 内存管理(二):JobManager 内存分配(含实际计算案例)
  • Flink 内存管理(三):TaskManager 内存分配(理论篇)
  • Flink 内存管理(四):TaskManager 内存分配(实战篇)

😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!!

在 《Flink 内存管理(一):设置 Flink 进程内存》中我们提到,必须使用下述三种方法之一配置 Flink 的内存(本地执行除外),否则 Flink 启动将失败。这意味着必须明确配置以下选项子集之一,这些子集没有默认值。

序号 for TaskManager for JobManager
1️⃣ taskmanager.memory.flink.size jobmanager.memory.flink.size
2️⃣ taskmanager.memory.process.size jobmanager.memory.process.size
3️⃣ taskmanager.memory.task.heap.sizetaskmanager.memory.managed.size jobmanager.memory.heap.size

1.单独分配 Total Process Size

单独分配 Total Process Size,其它的组件都会自动分配。

taskmanager.memory.process.size: 2000m

设置flink task任务内存,# Flink 核心篇,大数据,flink,内存管理,内存分配,jvm,TaskManager

内存分配步骤如下:

  • 首先 Total Process Size = 2000 M = 2000M =2000M
  • 因为没有显示分配组件中的任何参数,所以 JVM Overhead = 2000 M × 0.1 = 200 M = 2000M × 0.1 = 200M =2000M×0.1=200M
  • JVM Metaspace = 256 M = 256M =256M
  • ⭐ 所以 Native Memory = JVM Overhead + JVM Metaspace = 456 M = 456M =456M
  • Total Flink Size = 2000 M − 200 M − 256 M = 1544 M B = 1.508 G B = 2000M - 200M - 256M = 1544MB = 1.508GB =2000M200M256M=1544MB=1.508GB
  • Network Memory = 1544 × 0.1 = 154.4 M = 1544 × 0.1 = 154.4M =1544×0.1=154.4M
  • Task Off-Heap = = = 0 M B 0MB 0MB(默认)
  • Framework Off-Heap = = = 128 M 128M 128M(默认)
  • ⭐ 所以 Total Direct Memory = 154.4 M + 0 + 128 M = 282.4 M = 154.4M + 0 + 128M = 282.4M =154.4M+0+128M=282.4M
  • Managed Memory = 1544 M B × 0.4 = 617.6 M = 1544MB × 0.4 = 617.6M =1544MB×0.4=617.6M
  • Total JVM Heap Memory = 1544 M − 282.4 M − 617.6 M = 644 M B = 1544M - 282.4M - 617.6M = 644MB =1544M282.4M617.6M=644MB
  • Framework Heap = 128 M = 128M =128M
  • Task Heap = 644 M − 128 M = 516 M = 644M - 128M = 516M =644M128M=516M

可以与以下的日志进行对比,完全能对上,😁😁😁!

设置flink task任务内存,# Flink 核心篇,大数据,flink,内存管理,内存分配,jvm,TaskManager

2.单独分配 Total Flink Size

taskmanager.memory.flink.size: 2000m

假如直接只分配 taskmanager.memory.flink.size: 2000m

  • Total Flink Size = 2000 M = 2000M =2000M
  • Managed Memory = 2000 M × 0.4 = 800 M = 2000M × 0.4 = 800M =2000M×0.4=800M
  • NetWork Memory = 2000 M × 0.1 = 200 M = 2000M × 0.1 = 200M =2000M×0.1=200M
  • Framework Off-Heap = 128 M = 128M =128M
  • Task Off-Heap = 0 B y t e = 0 M = 0Byte = 0M =0Byte=0M
  • ⭐ 所以 Total Direct Memory = 200 M + 128 M + 0 M = 328 M = 200M + 128M + 0M= 328M =200M+128M+0M=328M
  • Total Off-Heap Memory = 800 M + 328 M = 1128 M = 800M + 328M = 1128M =800M+328M=1128M
  • Total JVM Heap = 2000 M − 800 M − 328 M = 872 M = 2000M - 800M - 328M = 872M =2000M800M328M=872M
  • Framework Heap = 128 M = 128M =128M
  • Task Heap = 872 M − 128 M = 744 M = 872M - 128M = 744M =872M128M=744M
  • JVM MetaSpace = 256 M = 256M =256M(默认)
  • JVM Overhead = ( = ( =(JVM Overhead +   256 M +\ 256M + 256M Metaspace +   2000 M +\ 2000M + 2000M Total Flink Size ) × 0.1 ) × 0.1 )×0.1,求解 JVM Overhead = 250.667 M = 250.667M =250.667M 192 M B ~ 1 G B 192MB ~ 1GB 192MB1GB,生效
  • Total Process Size = 2000 M + 256 M + 250.667 M = 2506.667 M = 2.448 G B = 2000M + 256M + 250.667M = 2506.667M = 2.448GB =2000M+256M+250.667M=2506.667M=2.448GB

设置flink task任务内存,# Flink 核心篇,大数据,flink,内存管理,内存分配,jvm,TaskManager

3.单独分配 Heap Size && Managed Memory

taskmanager.memory.task.heap.size: 1000m
taskmanager.memory.managed.size: 1000m
  • Framework Heap = 128 M = 128M =128M(默认)
  • Task Heap = 1000 M = 1000M =1000M(配置)
  • Total JVM Heap = 1000 M + 128 M = 1128 M = 1.102 G B = 1000M + 128M = 1128M = 1.102GB =1000M+128M=1128M=1.102GB
  • Managed Memory = 1000 M = 1000M =1000M(配置)
  • Framework Off-Heap = 128 M = 128M =128M
  • Task Off-Heap = 0 M = 0M =0M
  • NetWork = = = Total Flink Size ×   0.1 ×\ 0.1 × 0.1 = ( = ( =(NetWork +   1128 M + 1000 M + 128 M + 0 M ) × 0.1 +\ 1128M + 1000M + 128M + 0M) × 0.1 + 1128M+1000M+128M+0M)×0.1,计算得到 Network = 250.667 M B = 250.667MB =250.667MB,处于 64 M B ~ 1 G B 64MB ~ 1GB 64MB1GB,有效
  • ⭐ 所以 Total Direct Memory = 128 M + 250.667 M = 378.667 M = 128M + 250.667M = 378.667M =128M+250.667M=378.667M
  • Total Flink Size = 1128 M + 1378.667 M = 2506.667 M = 2.448 G B = 1128M + 1378.667M = 2506.667M = 2.448GB =1128M+1378.667M=2506.667M=2.448GB
  • JVM Metaspace = 256 M = 256M =256M(默认)
  • JVM Overhead = ( = ( =(JVM Overhead +   1128 M + 1000 M + 378.667 M + 256 M ) × 0.1 = 306.963 M +\ 1128M + 1000M + 378.667M + 256M) × 0.1 = 306.963M + 1128M+1000M+378.667M+256M)×0.1=306.963M,处于 192 M ~ 1 G B 192M ~ 1GB 192M1GB,有效
  • Total Process Size = 2506.667 M + 256 M + 306.963 M = 3069.63 M = 2.998 G = 2506.667M + 256M + 306.963M = 3069.63M = 2.998G =2506.667M+256M+306.963M=3069.63M=2.998G

设置flink task任务内存,# Flink 核心篇,大数据,flink,内存管理,内存分配,jvm,TaskManager

4.分配 Total Process Size 和 Heap Size && Managed Memory

指定 Total Process Size,同时显式分配组件 JVM HeapMamaged Memory

taskmanager.memory.process.size: 3000m
taskmanager.memory.task.heap.size: 1000m
taskmanager.memory.managed.size: 1000m
  • Total Process Size = 3000 M = 3000M =3000M
  • Framework Heap = 128 M = 128M =128M(默认)
  • Task Heap = 1000 M = 1000M =1000M(配置)
  • Total JVM Heap = = = Framework Heap + + + Task Heap = 128 M + 1000 M = 1128 M = 1.102 G = 128M + 1000M = 1128M = 1.102G =128M+1000M=1128M=1.102G
  • Managed Memory = 1000 M = 1000M =1000M(配置)
  • Framework Off-Heap = 128 M = 128M =128M(默认)
  • Task Off-Heap = 0 M = 0M =0M(默认)
  • Network Memory = ( = ( =(Network Memory +   1128 M + 1128 M ) × 0.1 = 250.667 M +\ 1128M + 1128M) × 0.1 = 250.667M + 1128M+1128M)×0.1=250.667M,在 64 M ~ 1 G B 64M ~ 1GB 64M1GB 之间,满足要求
  • Total Off-Heap = 1000 M + 128 M + 250.667 M + 0 M = 1378.667 M = 1.346 G B = 1000M + 128M + 250.667M + 0M = 1378.667M = 1.346GB =1000M+128M+250.667M+0M=1378.667M=1.346GB
  • Total Flink Size = 1128 M + 1378.667 M = 2506.667 M = 2.448 G B = 1128M + 1378.667M = 2506.667M = 2.448GB =1128M+1378.667M=2506.667M=2.448GB
  • JVM Metaspace = 256 M = 256M =256M
  • JVM Overhead = 3000 M − 2506.667 M − 256 M = 237.333 M = 3000M - 2506.667M - 256M = 237.333M =3000M2506.667M256M=237.333M,在 192 M ~ 1 G B 192M ~ 1GB 192M1GB 之间,满足要求

设置flink task任务内存,# Flink 核心篇,大数据,flink,内存管理,内存分配,jvm,TaskManager

5.分配 Total Flink Size 和 Heap Size && Managed Memory

指定 Total Flink Size,同时显式分配组件 JVM HeapMamaged Memory

taskmanager.memory.flink.size: 3000m
taskmanager.memory.task.heap.size: 1000m
taskmanager.memory.managed.size: 1000m
  • Total Flink Size = 3000 M = 2.93 G B = 3000M = 2.93GB =3000M=2.93GB(配置)
  • Managed Memory = 1000 M = 1000M =1000M(配置)
  • Task Heap = 1000 M = 1000M =1000M(配置)
  • Framework Heap = 128 M = 128M =128M(默认)
  • Total JVM Heap = = = Framework Heap + Task Heap = 128 M + 1000 M = 1128 M = 128M + 1000M =1128M =128M+1000M=1128M
  • Total Off-Heap Memory = 3000 M − 1128 M = 1872 M = 1.828 G B = 3000M - 1128M = 1872M = 1.828GB =3000M1128M=1872M=1.828GB
  • Direct Memory = = = Total Off-Heap Memory - Managed Memory = 1872 M − 1000 M = 872 M = 1872M - 1000M = 872M =1872M1000M=872M
  • Task Off-Heap = 0 M = 0M =0M(默认)
  • Framework Off-Heap = 128 M = 128M =128M(默认)
  • Network Memory = = = Direct Memory − - Task Off-Heap - Framework Off-Heap = 872 M − 0 M − 128 M = 744 M = 872M - 0M - 128M = 744M =872M0M128M=744M
  • JVM Metaspace = 256 M = 256M =256M(默认)
  • JVM Overhead = ( = ( =(JVM Overhead +   3000 M + 256 M ) × 0.1 +\ 3000M + 256M) × 0.1 + 3000M+256M)×0.1,计算得到 JVM Overhead = 361.778 M = 361.778M =361.778M,处于 192 M ~ 1 G 192M~1G 192M1G 之间,符合条件
  • Total Process Size = 3000 M + 256 M + 361.778 M = 3617.778 M = 3.533 G B = 3000M + 256M + 361.778M = 3617.778M = 3.533GB =3000M+256M+361.778M=3617.778M=3.533GB

设置flink task任务内存,# Flink 核心篇,大数据,flink,内存管理,内存分配,jvm,TaskManager

6.内存分配小结

在 Flink 的集群内存分配的过程中,我们大致可以通过 3 3 3 种方式进行分配。文章来源地址https://www.toymoban.com/news/detail-839284.html

  • 指定 Total Process SizeTotal Flink Size,取决于你用什么方式部署。
  • 单独指定某个组件,比如 Task-Heap 的大小,其它的组件都会被推导出来。
  • 指定 Total Process / Flink Size && Heap or Off-Heap 其中之一,其它的组件通过默认值进行填充或者进推导,如:
    • Total Flink Size = Total Heap Size + Total Off-Heap Size
    • Total Heap Size = Task Heap + Framework Heap
    • Total Off-Heap = Task Off-Heap + Framework Off-Heap + Network Memory + Managed Memory
    • Network = Total Flink Size ×   0.1 ×\ 0.1 × 0.1(没有指定其它组件情况下)
    • JVM Overhead = Total Process Size ×   0.1 ×\ 0.1 × 0.1(没有指定其它组件情况下)
    • … …

到了这里,关于【大数据】Flink 内存管理(四):TaskManager 内存分配(实战篇)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++——内存分配与动态内存管理

    🌸作者简介: 花想云 ,在读本科生一枚,致力于 C/C++、Linux 学习。 🌸 本文收录于 C++系列 ,本专栏主要内容为 C++ 初阶、C++ 进阶、STL 详解等,专为大学生打造全套 C++ 学习教程,持续更新! 🌸 相关专栏推荐: C语言初阶系列 、 C语言进阶系列 、 数据结构与算法 本章我们

    2023年04月17日
    浏览(56)
  • c++ 内存管理一:初识内存分配工具

    前言 侯捷 c++内存管理学习总结笔记。 在C++中,有几种常用的内存分配工具可以帮助进行动态内存管理。 从c++应用程序自上而下,通常会有这样的几种分配内存的方式,当然最终都是直接或间接的调用系统的API。 1 new 和 delete new 和 delete :new操作符用于在堆上分配内存,de

    2024年02月11日
    浏览(45)
  • 从 malloc 分配大块内存失败 来简看 linux 内存管理

    应用进程 malloc 返回了null,但是观察到的os 的free内存还有较大的余量 ,很奇怪为什么会这样? 不可能是oom导致的(当然也没有 os 的oom 日志),free还有余量,系统也没有cgroup的应用隔离。 我们linux上使用的库函数 malloc 基本都是用glibc库实现的malloc函数(当然如果binary 链接

    2024年02月08日
    浏览(53)
  • 【C\C++】内存分配 和 动态内存管理方式

    如上图所示:在C/C++中,有几个重要的内存区域,每个区域都有不同的意义和用途。我们从内存分配的角度来分析C++各个内存区域的含义: 栈(Stack) :栈是用于 存储 局部变量、函数参数以及函数调用信息 的内存区域 。它的特点是 自动分配和释放 ,并且遵循 后进先出的原

    2024年02月08日
    浏览(44)
  • flink任务的taskmanager失败Heartbeat of TaskManager with id taskmanager-1-1 timed out.

    flink任务上线运行 问题java.util.concurrent.TimeoutException: Heartbeat of TaskManager with id job-af2f94d0-59d7-4e51-aa55-dc91d1a264a8-taskmanager-1-1 timed out. 报错原因 分布式物理机网络失联。 Failover的节点对应Taskmanager的内存设置太小,垃圾回收机制会导致心跳超时。 解决方案 如果此问题出现的

    2024年02月14日
    浏览(47)
  • Flink源码之TaskManager启动流程

    从启动命令flink-daemon.sh可以看出TaskManger入口类为org.apache.flink.runtime.taskexecutor.TaskManagerRunner 在TaskManagerRunner构造函数中,可以看出与JobManger类似,也是先构造出一些公共服务: 这些服务在构造TaskExecutor时作为构造函数参数传入 构造TaskExecutor前会先构造TaskManagerServices辅助Task

    2024年02月13日
    浏览(32)
  • 【内存管理】flink内存管理(一):内存管理概述:flink主动管理内存原理、flink内存模型

    本节从整体使用的角度了解Flink如何实现对内存的积极管理,然后对比基于JVM带来的内存管理问题,介绍Flink如何抽象出合理内存模型,解决大规模场景下的内存使用问题。 在JVM上运行的系统,需要将数据存储到JVM堆内存中进行处理和运算,借助JVM提供的GC能力能够实现内存的

    2024年01月20日
    浏览(54)
  • 关于Flink,TaskManager日志问题的一个记录

    疑问:不知道大家有和我一样,开发完的flink代码推送到flink集群上执行的时候log.info(xxxx)打印的日志不会打印到task-manager节点上去(在IDEA上执行可以打印日志到控制台上),为此一直在困扰了,经过一系列的尝试,终于在java和scala中实现log.info(xxx)打印到task-manager节点上。 java代

    2024年02月16日
    浏览(40)
  • Spark内存资源分配——spark.executor.memory等参数的设置方法

    基于论坛上一些关于spark内存设置的文章,我对一个项目中实际运行的任务进行了内存参数分析和优化。如果要了解更多详细设置原理,可见文末的参考文章链接。 已知内存分配存在通过用户提交的参数设置进行静态分配,和yarn进行动态分配两种,所以本文对两种状况都根据

    2023年04月13日
    浏览(113)
  • 【Linux 内核源码分析】内存管理——Slab 分配器

    在Linux内核中,伙伴分配器是一种内存管理方式,以页为单位进行内存的管理和分配。但是在内核中,经常会面临结构体内存分配问题,而这些结构体的大小通常是小于一页的。如果使用伙伴分配器来分配这些小内存,将造成很大的内存浪费。因此,为了解决这个问题,Sun公

    2024年02月22日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包