开发者社区 > 弹性计算 > 云服务器ECS > 正文

flink on yarn模式,应用模式,一个TaskManager至少会占用2G内存吗?

已解决

环境说明:
flink 1.15
CDH集群6.3.2
现在采用flink on yarn模式,应用模式向yarn提交作业时,指定-Dtaskmanager.memory.process.size参数来设置TaskManager的内存,发现不管这个参数设多小,在yarn的界面上看这个TaskManager对应的Container占用的内存最小都会占用2G内存,请问这是为什么?

展开
收起
游客fuzojzpl5x2bu 2024-01-17 10:12:38 76 0
2 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。
    推荐回答

    这是因为Flink在Yarn模式下,TaskManager的内存分配是由YARN的资源管理器(ResourceManager)来决定的。当你使用-Dtaskmanager.memory.process.size参数来设置TaskManager的内存时,这个参数实际上是设置了每个Flink进程的堆内存大小。但是,YARN的资源管理器在分配资源时,会为每个容器预留一定的额外内存,这部分内存用于存储容器运行时的元数据、系统类库等。

    因此,即使你设置了-Dtaskmanager.memory.process.size参数,TaskManager对应的Container占用的内存最小也会占用2G内存。这是由YARN的资源管理器决定的,与Flink本身无关。

    2024-01-17 14:06:34
    赞同 展开评论 打赏
  • www.qqmu.com获取编程项目源码学习

    在 Flink on YARN 模式下,通过指定 -Dtaskmanager.memory.process.size 参数来设置 TaskManager 的内存大小是正确的做法。然而,由于 YARN 的内存分配机制以及 Flink 的内存管理机制,导致实际分配给 TaskManager 的内存总是会比配置的内存大小稍微大一些。

    Flink 使用了预留内存来处理一些额外的计算任务,比如网络通信、堆外内存分配等。这些任务所使用的内存不计入用户配置的 TaskManager 内存大小中。因此,即使设置 -Dtaskmanager.memory.process.size 参数为较小的值,Flink 仍然会预留一部分内存。

    此外,YARN 本身也会对容器的内存进行一些管理和优化。默认情况下,YARN 会在分配给容器的内存中留出一部分空间用于操作系统和其他系统进程的使用。这个空间的大小可以通过 YARN 的配置项 yarn.nodemanager.resource.memory-mb 进行调整。

    所以,在 YARN 界面上看到的 TaskManager 对应的 Container 占用的内存最小都会占用2G内存,这是由于 Flink 的内存管理机制和 YARN 的内存分配机制所导致的。

    2024-01-22 08:07:56
    赞同 展开评论 打赏

云服务器ECS是一种安全可靠、弹性可伸缩的IaaS级云计算服务。在这里你可以获取最新的ECS产品资讯、最前沿的技术交流以及优惠活动等信息,加速自己的技术成长。

相关电子书

更多
Flink CDC Meetup PPT - 龚中强 立即下载
Flink CDC Meetup PPT - 王赫 立即下载
Flink CDC Meetup PPT - 覃立辉 立即下载