我试图了解容器如何在 YARN 中分配内存以及它们基于不同硬件配置的性能。
所以,这台机器有 30 GB 的 RAM,我为 YARN 选择了 24 GB,为系统留下了 6 GB。
yarn.nodemanager.resource.memory-mb=24576
然后我按照 http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.0.6.0/bk_installing_manually_book/content/rpm-chap1-11.html 想出了一些用于Map&Reduce任务内存的值。
我将这两个保留为默认值:
mapreduce.map.memory.mb
mapreduce.map.java.opts
但是我更改了这两个配置:
mapreduce.reduce.memory.mb=20480
mapreduce.reduce.java.opts=Xmx16384m
但是当我使用该设置放置作业时,我收到错误并且该作业被强制杀死:
2015-03-10 17:18:18,019 ERROR [Thread-51] org.apache.hadoop.mapreduce.v2.app.rm.RMContainerAllocator: Could not deallocate container for task attemptId attempt_1426006703004_0004_r_000000_0
到目前为止,唯一对我有用的值是设置减速器内存<= 12 GB,但为什么呢?为什么我不能分配更多内存或最多 (2 * 每个容器 RAM?
那么我在这里错过了什么?在设置这些值以获得更好的性能时,我还需要考虑什么吗?
通过更改 yarn.scheduler.maximum-allocation-mb 值解决了此问题。在 YARN 中,作业使用的内存不得超过服务器端配置 yarn.scheduler.maximum-allocation-mb。虽然我为 yarn.nodemanager.resource.memory-mb 设置了值,但它也应该反映最大分配大小。因此,在更新最大分配后,作业按预期工作:
yarn.nodemanager.resource.memory-mb=24576
yarn.scheduler.maximum-allocation-mb=24576