集群模式下执行HQL提示`Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask`

Posted sanerbaby

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集群模式下执行HQL提示`Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask`相关的知识,希望对你有一定的参考价值。

集群模式下执行HQL提示`Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask`


很遗憾,没等把我本地Linux的报错和日志截图,电脑就自己罢工卡死了,所以只能通过回忆的方式来记录,我称之为回忆录。

报错背景

鄙人不才,最近在研究kettle和数仓。在学习使用kettle执行HQL作业时,发现运行错误,有报错提示,在hs2控制台发现输出的错误为Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask。抱着怀疑的态度在hive的shell控制台执行了同样的HQL,但是不幸提示了同样的信息。

其他的报错提示:

  • hive的shell控制台打印的信息还有mapper=0,reducer=0…
  • Container exited with a non-zero exit code 1.
    Error file:prelaunch.err.org.apache.hadoop.mapreduce.

排除可能存在的原因

通常当我们使用hive执行HQL失败时,如果不是因为报错异常退出而只是MR任务卡死,我们一般会设置hive为本地(local)模式,然后执行同样的HQL,如果可以执行成功,我们通常可以排除一些错误原因:

  1. yarn内存资源不足导致MR任务/job的执行失败
    ps:试问,如果是这种原因,local模式都可以运行的HQL,集群模式下HQL会因为内存资源的问题而导致HQL没法正常执行?
  2. HQL本身语法的问题

查找原因

查找原因这个部分要求我们对于MR任务的执行过程有着足够的了解。
当我们熟练掌握MR的执行过程后,我们会根据控制台打印的提示信息判断MR作业是在哪个过程/阶段出现了问题,随后我们会定位到是哪个组件/进程与之相关,接着我们就可以去相应的存储日志的目录查看日志排查出问题。

实现

其实这里应该说是最简单的,因为当我以集群模式执行HQL时,我的MR作业是有job编号的,即已经提交了MR任务,尽管任务失败了。但是,这里告诉我们的信息就是
“作业是在提交MR任务后(job)失败的” ,这也就等同于是在resourcemanager这个阶段失败的。
那么我们直接去查看resourcemanager的日志寻找报错提示就好了:
进入:http://slave1:8042/logs/userlogs这个地址,其中slave1为resourcemanager的服务器,然后进入错误信息里提到的jobid的日志。
经查验,我的错误原因是找不到或无法加载主类
org.apache.hadoop.mapreduce.v2.app.MRAppMaster。而对于这个错误的解决方法,见:解决方案

ps:

  • 本人的Hadoop版本为Hadoop2.7.2
  • 对于hadoop classpath的值,直接粘贴到value即可,切忌因为行(value值)太长而换行,换行后就不是原本的value值了,我就是因为换行而导致出现了这样的问题。

以上是关于集群模式下执行HQL提示`Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask`的主要内容,如果未能解决你的问题,请参考以下文章

execution error是啥意思

python Tensorflow中的数据集可以在Eager Execution模式下迭代。

RedHat6下安装VMware-Tools失败,提示:Execution aborted。

python 在非Eager Execution模式下,可以使用make_one_shot_iterator()迭代数据集

大数据系列Hive安装及web模式管理

多线程系列之二:Single Thread Execution 模式