环境说明:
flink 1.15
CDH集群6.3.2
现在采用flink on yarn模式,应用模式向yarn提交作业时,指定-Dtaskmanager.memory.process.size参数来设置TaskManager的内存,发现不管这个参数设多小,在yarn的界面上看这个TaskManager对应的Container占用的内存最小都会占用2G内存,请问这是为什么?
这是因为Flink在Yarn模式下,TaskManager的内存分配是由YARN的资源管理器(ResourceManager)来决定的。当你使用-Dtaskmanager.memory.process.size参数来设置TaskManager的内存时,这个参数实际上是设置了每个Flink进程的堆内存大小。但是,YARN的资源管理器在分配资源时,会为每个容器预留一定的额外内存,这部分内存用于存储容器运行时的元数据、系统类库等。
因此,即使你设置了-Dtaskmanager.memory.process.size参数,TaskManager对应的Container占用的内存最小也会占用2G内存。这是由YARN的资源管理器决定的,与Flink本身无关。
在 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 的内存分配机制所导致的。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。