无法为任务 attemptId NNN 解除分配容器

Could not deallocate container for task attemptId NNN

我正在尝试了解容器如何在 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

到目前为止唯一对我有用的值是设置 reducer 内存 <= 12 GB,但这是为什么呢?为什么我不能分配更多内存或最多 (2 * RAM-per-container?

那么我在这里缺少什么?在设置这些值以获得更好的性能时,我还需要考虑什么吗?

通过更改 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