无法为任务尝试释放 NNN 的容器

dre*_*mer 2 memory hadoop mapreduce bigdata hadoop-yarn

我试图了解容器如何根据不同的硬件配置在 YARN 中分配内存及其性能。

所以,这台机器有 30 GB 的 RAM,我为 YARN 选择了 24 GB,为系统保留了 6 GB。

yarn.nodemanager.resource.memory-mb=24576
Run Code Online (Sandbox Code Playgroud)

然后我按照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
Run Code Online (Sandbox Code Playgroud)

但我改变了这两个配置:

mapreduce.reduce.memory.mb=20480
mapreduce.reduce.java.opts=Xmx16384m
Run Code Online (Sandbox Code Playgroud)

但是,当我使用该设置放置工作时,出现错误并且该工作被强行杀死:

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
Run Code Online (Sandbox Code Playgroud)

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

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

dre*_*mer 5

通过更改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
Run Code Online (Sandbox Code Playgroud)