gpt4 book ai didi

hadoop - "Container is running beyond physical memory limits"

转载 作者:可可西里 更新时间:2023-11-01 15:26:12 26 4
gpt4 key购买 nike

我正在从事一项工作,其中 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

(希望我的简化代码没有错误,我非常有信心在我的真实代码中没有错误)

许多 reduce 作业中有一些成功(上次尝试 17 个,上次尝试 58 个),一些被杀死(上次尝试 64 个,上次尝试 23 个),还有一些失败(上次尝试 31 个) , 25 在前一个)。

如果需要,您会在问题底部找到一次失败的 reduce 尝试的完整日志,但如果我没记错的话,这里是重要部分:

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 发生的方式不可能是其他任何方式。

那么我的问题是:如何避免占用太多内存?

  • 设置更多(或更少?)reducer ?

或者,也许(因为一些 reducer 成功了):

  • 增加尝试工作的次数? (如果是:如何?)
  • 增加超时前的时间? (如果是:如何?)

如果它有用:

Average Map Time        1mins, 3sec
Average Shuffle Time 10sec
Average Merge Time 1sec
Average Reduce Time 7mins, 5sec

一次失败的 reduce 尝试的完整日志(来自 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

最佳答案

如果您的 Reduce 步骤只有 3GB,就给它们 4GB...!
设置 mapreduce.reduce.memory.mb = 4096 ;

除非您使用的是 TEZ,它的通用 hive.tez.container.size 具有特定属性


有关 YARN 如何管理内存配额的更多信息,请参阅 Distcp - Container is running beyond physical memory limits

关于hadoop - "Container is running beyond physical memory limits",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46807972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com