yarn中MR作业报错Java heap space

刺骨的言语ヽ痛彻心扉 2022-05-17 02:37 353阅读 0赞

hue页面提交到hive中的作业,被转换成了MR作业运行在yarn集群中。作业报错
//0,报错内容摘要
我们hadoop-2.7集群用的执行引擎不是Tez,而是mr(是老集群)
Error: Java heap space
Container killed by the ApplicationMaster.

//1,查找报错日志
[root@ my-hadoop-cluster hive]# grep -C 3 —color “log.dir” {HIVE_HOME}/conf/hive-log4j.properties

  1. # Define some default values that can be overridden by system properties
  2. hive.log.threshold=ALL
  3. hive.root.logger=INFO,DRFA
  4. hive.log.dir=/mnt/log/hive/scratch/${user.name}
  5. hive.log.file=hive.log
  6. # Define the root logger to the system property "hadoop.root.logger".
  7. --
  8. log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender
  9. log4j.appender.DRFA.File=${hive.log.dir}/${hive.log.file}
  10. # Rollver at midnight
  11. log4j.appender.DRFA.DatePattern=.yyyy-MM-dd

//2,进到hive日志所在目录,查看hive.log

  1. 2018-08-05 13:26:28,570 ERROR [Thread-35]: exec.Task (SessionState.java:printError(948)) -
  2. Task with the most failures(4):
  3. -----
  4. Task ID:
  5. task_1532952070023_22931_r_000852
  6. URL:
  7. http:// my-hadoop-cluster:8088/taskdetails.jsp?jobid=job_1532952070023_22931&tipid=task_1532952070023_22931_r_000852
  8. -----
  9. Diagnostic Messages for this Task:
  10. Error: Java heap space
  11. Container killed by the ApplicationMaster.
  12. Container killed on request. Exit code is 143
  13. Container exited with a non-zero exit code 143
  14. 2018-08-05 13:26:28,649 INFO [main]: impl.YarnClientImpl (YarnClientImpl.java:killApplication(401)) - Killed application application_1532952070023_229
  15. 31

//3,从错误日志中的Diagnostic Messages for this Task做分析
此reduce阶段的任务被AM杀掉了。原因是该任务的container使用的java堆内存超出了限制。具体是什么限制?可以查找mapred-site.xml 中MapReduce作业对reduce阶段的堆内存限制,我这里的是做了2Gb的限制(默认1Gb):
[root@my-hadoop-cluster conf]# grep -iC 2 —color “reduce.memory.mb” mapred-site.xml

  1. <property>
  2. <name>mapreduce.reduce.memory.mb</name>
  3. <value>2048</value>
  4. </property>

展开来分析原因,task是运行在container上面的,也就是运行在JVM中,而此作业的reduce任务所对应的JVM堆内存大小已经超过2G。为什么超出2Gb?可能是产生的对象太多,占满了heap space;也可能是堆size太小,可以根据作业需求适当调大一些,例如3072

//4,解决办法
要么增大reduce.memory.mb 要么减小计算的数据量(可通过适当增加reducer个数来把算力分散到各节点)

//5,MR作业的内存分配简介

  1. $ cd {HIVE_HOME}/conf/
  2. $ grep -iEC 2 --color "map.java.opts|reduce.java.opts" mapred-site.xml
  3. <property>
  4. <!—当前container下的java子进程(map task)中的JVM可用堆内存上限,超限会爆OOM-->
  5. <name>mapreduce.map.java.opts</name>
  6. <value>-Xmx800m -verbose:gc -Xloggc:/tmp/@taskid@.gc</value>
  7. </property>
  8. --
  9. <property>
  10. <!—当前container下的java子进程(reduce task)中的JVM可用堆内存上限,超限会爆OOM-->
  11. <name>mapreduce.reduce.java.opts</name>
  12. <value>-Xmx1736m -verbose:gc -Xloggc:/tmp/@taskid@.gc</value>
  13. </property>
  14. $ grep -iEC 2 --color "reduce.memory.mb|map.memory.mb" mapred-site.xml
  15. <property>
  16. <!—该值是container内存上限,由NM监控,一旦超限会被NM杀掉. mapreduce.map.java.opts须小于该值-->
  17. <name>mapreduce.map.memory.mb</name>
  18. <value>512</value>
  19. </property>
  20. --
  21. <property>
  22. <!—当前container下的java子进程(reduce task)中的JVM可用堆内存上限,超限会AM杀掉-->
  23. <name>mapreduce.reduce.memory.mb</name>
  24. <value>2048</value>
  25. </property>

发表评论

表情:
评论列表 (有 0 条评论,353人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java heap space

    摘要: > 因为项目涉及到的数据较,对象较多,所以在执行时遇到了这个错误 > > 通过搜索,应该不能找到这种错误出现的原因,伴随这个错误的一般还有如下错误: > >