我正在開發Hive查詢使用R文件的作業,這些文件分佈在羣集上以便在每個節點上運行。「容器超出物理內存限制」
就像是:
ADD FILES hdfs://path/reducers/my_script.R
SET hive.mapred.reduce.tasks.speculative.execution=false;
SET mapred.reduce.tasks = 80;
INSERT OVERWRITE TABLE final_output_table
PARTITION (partition_column1, partition_column2)
SELECT selected_column1, selected_column2, partition_column1, partition_column2
FROM (
FROM
(SELECT input_column1, input_column2, input_column3
FROM input_table
WHERE partition_column1 = ${parameter1}
AND partition_column1 = ${parameter2}
distribute BY concat(input_column1, partition_column1)) mapped
REDUCE input_column1, input_column2, input_column3
USING 'my_script.R'
AS selected_column1, selected_column2
) reduced
(希望有一個在我的減少代碼沒有錯,我非常有信心有沒有在我真正的代碼)
一些很多減少就業機會成功(17在我最後一次嘗試中,前一次是58次),有些人死亡(最後一次嘗試64次,前一次23次),有一次失敗(31次最後一次嘗試,25次前一次)。
你會發現一個完整日誌,在它需要的情況下,這個問題底部的失敗減少的嘗試之一,但如果我沒有記錯,這裏是重要的部分:
Container [pid=14521, containerID=container_1508303276896_0052_01_000045] is running beyond physical memory limits.
Current usage: 3.1 GB of 3 GB physical memory used; 6.5 GB of 12 GB virtual memory used.
Killing container.
[...]
Container killed on request.
Exit code is 143 Container exited with a non-zero exit code 143
我的理解是:在my_script.R
中完成的數學過程中發生的事情需要太多的物理內存。
我們假設my_script.R
中的代碼沒有任何改進,並且distribute
發生的方式不能是別的。
我的問題是:我能做些什麼來避免佔用太多內存?
- 設置更多(或更少?)減速器?
或者,也許(因爲一些減速成功):
- 在作業增加嘗試的次數? (如果是這樣:如何?)
- 超時前增加時間? (如果是的話:怎麼樣?)
在情況下,它是非常有用的:
Average Map Time 1mins, 3sec
Average Shuffle Time 10sec
Average Merge Time 1sec
Average Reduce Time 7mins, 5sec
全部日誌失敗減少的嘗試之一(從Hadoop作業監視控制檯,端口8088和19888)的:
Container [pid=14521,containerID=container_1508303276896_0052_01_000045] is running beyond physical memory limits.
Current usage: 3.1 GB of 3 GB physical memory used; 6.5 GB of 12 GB virtual memory used.
Killing container.
Dump of the process-tree for container_1508303276896_0052_01_000045 :
|- PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS) SYSTEM_TIME(MILLIS) VMEM_USAGE(BYTES) RSSMEM_USAGE(PAGES) FULL_CMD_LINE
|- 15690 14650 14521 14521 (R) 5978 434 2956750848 559354 /usr/lib/R/bin/exec/R --slave --no-restore --file=/mnt/bi/hadoop_tmp/nm-local-dir/usercache/hadoop/appcache/application_1508303276896_0052/container_1508303276896_0052_01_000045/./my_script.R
|- 14650 14521 14521 14521 (java) 3837 127 3963912192 262109 /usr/lib/jvm/java-8-openjdk-amd64/bin/java -Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN -Xmx2048m -Djava.io.tmpdir=/mnt/bi/hadoop_tmp/nm-local-dir/usercache/hadoop/appcache/application_1508303276896_0052/container_1508303276896_0052_01_000045/tmp -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/mnt/bi/hadoop_tmp/userlogs/application_1508303276896_0052/container_1508303276896_0052_01_000045 -Dyarn.app.container.log.filesize=0 -Dhadoop.root.logger=INFO,CLA org.apache.hadoop.mapred.YarnChild 10.32.128.5 20021 attempt_1508303276896_0052_r_000014_0 45
|- 14521 20253 14521 14521 (bash) 1 2 13578240 677 /bin/bash -c /usr/lib/jvm/java-8-openjdk-amd64/bin/java -Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN -Xmx2048m -Djava.io.tmpdir=/mnt/bi/hadoop_tmp/nm-local-dir/usercache/hadoop/appcache/application_1508303276896_0052/container_1508303276896_0052_01_000045/tmp -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/mnt/bi/hadoop_tmp/userlogs/application_1508303276896_0052/container_1508303276896_0052_01_000045 -Dyarn.app.container.log.filesize=0 -Dhadoop.root.logger=INFO,CLA org.apache.hadoop.mapred.YarnChild 10.32.128.5 20021 attempt_1508303276896_0052_r_000014_0 45
1>/mnt/bi/hadoop_tmp/userlogs/application_1508303276896_0052/container_1508303276896_0052_01_000045/stdout
2>/mnt/bi/hadoop_tmp/userlogs/application_1508303276896_0052/container_1508303276896_0052_01_000045/stderr
Container killed on request.
Exit code is 143 Container exited with a non-zero exit code 143
「讓我們假設沒有改善可以做my_script.R中的代碼「我發現這是一個極不可能的假設。無論如何,如果你做出這個假設,你就不應該用[tag:r]來標記這個問題。 – Roland