错误描述
执行 hive 任务报错
#==highlighting text==
#版本:
#Hive 2.2.0
#Hadoop 2.7.6
Exit code is 143 Container exited with a non-zero exit code 143
#附加上次执行日志:
22/03/20 04:32:20 INFO mapreduce.Job: Job job_1627608309192_64953 running in uber mode : false
22/03/20 04:32:20 INFO mapreduce.Job: map 0% reduce 0%
22/03/20 05:02:48 INFO mapreduce.Job: Task Id : attempt_1627608309192_64953_m_000063_0, Status : FAILED
22/03/20 05:02:48 INFO mapreduce.Job: Task Id : attempt_1627608309192_64953_m_000087_0, Status : FAILED
22/03/20 05:02:48 INFO mapreduce.Job: Task Id : attempt_1627608309192_64953_m_000071_0, Status : FAILED
Hive 任务执行时设置的参数
查看关于 container 内存的配置:
hive> SET mapreduce.map.memory.mb;
mapreduce.map.memory.mb=8192
hive> SET mapreduce.reduce.memory.mb;
mapreduce.reduce.memory.mb=16384
hive> SET yarn.nodemanager.vmem-pmem-ratio;
yarn.nodemanager.vmem-pmem-ratio=2.1
hive> set mapred.map.child.java.opts;
mapred.map.child.java.opts=-Xmx8192m
注:
yarn.nodemanager.vmem-pmem-ratio: 虚拟内存率,默认2.1
错误分析
从 hive 报错看是由于物理内存达到限制,导致 container 被 kill 掉报错。
过滤程序日志,看出现报错是属于哪一个阶段,是map task阶段或者reduce task阶段,是哪一阶段的内存不足导致的问题。
结论
从上面执行时候配置的参数看,单个map 和 reduce 分配物理内存 8G; 虚拟内存限制 8 * 2.1 = 16.8G 。
所以从上面的报错信息来看,是由于单个 task (map task 或 reduce task) 处理的数据量超过物理内存 8G 限制导致的,所以设置两个选项即可解决该问题。
###
mapreduce.map.memory.mb = 16384
mapred.map.child.java.opts=-Xmx13926m
###
<property>
<name>mapreduce.map.memory.mb</name>
<value>16384</value>
<description>Comma separated list of variables which are used internally and should not be configurable.</description>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx13926m</value>
<description>Comma separated list of variables which are used internally and should not be configurable.</description>
</property>