什么是Hive:从org.apache.hadoop.hive.ql.exec.MapRedTask返回代码2

我正进入(状态:

FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.MapRedTask 

在尝试使用hive控制台中的命令复制分区表时:

 CREATE TABLE copy_table_name LIKE table_name; INSERT OVERWRITE TABLE copy_table_name PARTITION(day) SELECT * FROM table_name; 

我最初得到了一些语义分析错误,必须设置:

 set hive.exec.dynamic.partition=true set hive.exec.dynamic.partition.mode=nonstrict 

虽然我不确定上述属性是干什么的?

从蜂房控制台完全输出:

 Total MapReduce jobs = 1 Launching Job 1 out of 1 Number of reduce tasks determined at compile time: 1 In order to change the average load for a reducer (in bytes): set hive.exec.reducers.bytes.per.reducer=<number> In order to limit the maximum number of reducers: set hive.exec.reducers.max=<number> In order to set a constant number of reducers: set mapred.reduce.tasks=<number> Starting Job = job_201206191101_4557, Tracking URL = http://jobtracker:50030/jobdetails.jsp?jobid=job_201206191101_4557 Kill Command = /usr/lib/hadoop/bin/hadoop job -Dmapred.job.tracker=master:8021 -kill job_201206191101_4557 2012-06-25 09:53:05,826 Stage-1 map = 0%, reduce = 0% 2012-06-25 09:53:53,044 Stage-1 map = 100%, reduce = 100% Ended Job = job_201206191101_4557 with errors FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.MapRedTask 

这不是真正的错误,下面是如何find它:

转到hadoop jobtracker web-dashboard,find失败的configuration单元mapreduce作业并查看失败任务的日志。 这会告诉你真正的错误。

控制台输出错误是无用的,主要是因为它没有一个单独的作业/任务的视图拉动真正的错误(可能在多个任务中的错误)

希望有所帮助。

我知道我在这个线程上迟了3年,但是在将来我仍然会为类似的情况提供2美分。

我最近在集群中面临同样的问题/错误。 JOB总是会减less80%左右,并且会以相同的错误失败,在执行日志中也没有任何事情发生。 经过多次迭代和研究,我发现在获取的大量文件中有一些不符合为基表提供的结构(用于将数据插入到分区表中的表)。

这里要注意的一点是,每当我在分区列中执行特定值的select查询或创build一个静态分区时,它都能正常工作,因为在这种情况下,错误logging被跳过。

TL; DR:检查传入的数据/文件在结构上的不一致性,因为HIVE遵循Schema-On-Read原理。

在这里添加一些信息,因为我花了一段时间才findHDInsight中的hadoop jobtracker web-dashboard(Azure的Hadoop),而一个同事最终告诉我它在哪里。 头节点上有一个名为“Hadoop Yarn Status”的快捷方式,它只是一个到本地http页面的链接( http:// headnodehost:9014 / cluster在我的情况下)。 当打开仪表板时,看起来像这样:

在这里输入图像说明

在该仪表板中,您可以find失败的应用程序,然后点击进入后,您可以查看个别地图的日志并减less作业。

在我的情况下,似乎仍然在减速器内存不足,即使我已经在configuration中已经启动了内存。 由于某种原因,它并没有出现我之前得到的“java outofmemory”错误。

我从S3中的EMR输出path中删除了_SUCCESS文件,它工作正常。

最好的答案是正确的,错误代码不会给你太多的信息。 我们在团队中看到的这个错误代码的一个常见原因是查询没有得到很好的优化。 一个已知的原因是当我们做一个内部连接时,左边的桌子的大小比右边的桌子大。 在这种情况下,交换这些表格通常会起到诀窍的作用。

即使我面临同样的问题 – 当在仪表板上检查时,我发现下面的错误。 由于这些数据是通过Flume传递的,因此可能在less数文件中出现不一致。

 Caused by: org.apache.hadoop.hive.serde2.SerDeException: org.codehaus.jackson.JsonParseException: Unexpected end-of-input within/between OBJECT entries 

在更less的文件上运行。 格式一致性是我的理由。

当我将数据插入到指向弹性search簇的HIVE外部表中时,我也面临同样的错误。

我把旧的JAR elasticsearch-hadoop-5.6.0.jar ,一切正常。

我的build议是请根据弹性search版本使用特定的JAR。 如果您使用较新版本的弹性search,请不要使用较旧的JAR。

感谢这篇文章Hive- Elasticsearch写操作#409