Docker上的Hadoop(纱线)控制资源消耗(CPU和RAM)

我有一个运行在Docker上的hadoop(2.7.3,伪集群节点,单节点)。 该docker运行在64核心的128位至强处理器的Xeon机器上。

在执行mapreduce的时候,我可以从一眼看出,它有CPU使用率的峰值,有时超过100%。 短跑进程的尖峰(我可以看到它是那些hadoop进程之一)。

厌倦了一眼追踪/ ht op,我将最高输出(批处理模式)转储到一个文件,并对文件执行运行后检查。 我得到这个有问题的命令:

/opt/jdk/bin/java -Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN -Xmx200m -Djava.io.tmpdir=/tmp/hadoop-hadoop/nm-local-dir/usercache/hadoop/appcache/application_1494685463128_0031/container_1494685463128_0031_01_000008/tmp -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/usr/local/hadoop/logs/userlogs/application_1494685463128_0031/container_1494685463128_0031_01_000008 -Dyarn.app.container.l+ 

究竟是什么? 它仍然被截断,尽pipe我已经在shell上完成了这个技巧:

 export COLUMNS=$((COLUMNS*48)) export LINES=$((LINES/48)) top -c -b -n 2000000 > eventsbatcher.top.out 

无论如何,这是hadoop; 并可能是节点pipe理器(?)。 如何驯服它? 我应该在Docker级别上驯服它(确保没有容器使用超过X的CPU / RAM),还是应该在hadoop方面控制它? 或两者? 我想这应该是两个。

在hadoop方面,实际上我已经在我的yarn-site.xml中有这个了。 我怎么知道它被尊重? 这+ 100%的CPU使用率让我觉得这个特别的configuration不被尊重。 也许我错了。

 <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>8192</value> </property> <property> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>8</value> </property> 

docker方呢? 如何限制/驯服我的hadoop容器?

在此先感谢答案/指针!