集群模式下执行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值了,我就是因为换行而导致出现了这样的问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值