“容器运行超出物理内存限制”

nimxete2  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(423)

我正在做一个作业,在这个作业中,配置单元查询使用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 不可能是别的。
我的问题是:我能做些什么来避免占用太多的内存?
设置更多(或更少?)减速器?
或者,也许(因为有些减速器成功了):
增加一项工作的尝试次数(如果是:怎么做?)
超时前增加时间(如果是:怎么做?)
如果有用:

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
k5hmc34c

k5hmc34c1#

如果你的reduce步骤只有3gb,那就给他们4gb。。。! set mapreduce.reduce.memory.mb = 4096 ; 除非您使用的是对其泛型具有特定属性的tez hive.tez.container.size 有关yarn如何管理内存配额的更多信息,请参阅distcp-container正在超出物理内存限制运行

jbose2ul

jbose2ul2#

好吧,我想得到更多的解释,但同时,这里有一个试错答案:
尝试了40个减速器,失败了。
尝试了160个减速器,成功了一次。再构建几次,看看它是否可靠,如果是一次性的成功,我会更新我的答案。

相关问题