73

我正进入(状态:

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

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

来自 hive 控制台的完整输出:

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
4

10 回答 10

124

这不是真正的错误,这里是如何找到它:

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

控制台输出错误是无用的,主要是因为它没有查看单个作业/任务来提取真正的错误(多个任务中可能存在错误)

希望有帮助。

于 2012-06-28T16:07:18.853 回答
20

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

我最近在集群中遇到了同样的问题/错误。JOB 总是会减少 80% 以上,并因同样的错误而失败,执行日志中也没有任何内容。经过多次迭代和研究,我发现在加载的大量文件中,有些不符合为基表提供的结构(用于将数据插入分区表的表)。

这里要注意的一点是,每当我对分区列中的特定值执行选择查询或创建静态分区时,它都可以正常工作,因为在这种情况下会跳过错误记录。

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

于 2015-04-07T19:14:08.423 回答
4

在此处添加一些信息,因为我花了一段时间才在 HDInsight(Azure 的 Hadoop)中找到 hadoop jobtracker web-dashboard,一位同事终于向我展示了它在哪里。头节点上有一个名为“Hadoop Yarn Status”的快捷方式,它只是指向本地 http 页面的链接(在我的例子中是http://headnodehost:9014/cluster)。打开仪表板后是这样的:

在此处输入图像描述

在该仪表板中,您可以找到失败的应用程序,然后单击它后,您可以查看各个地图的日志并减少作业。

在我的情况下,reducer 中的内存似乎仍然不足,即使我已经在配置中启动了内存。出于某种原因,它没有出现我之前遇到的“java outofmemory”错误。

于 2015-09-09T08:56:17.453 回答
2

我从 S3 的 EMR 输出路径中删除了 _SUCCESS 文件,它运行良好。

于 2015-04-10T10:55:05.620 回答
2

最佳答案是正确的,错误代码没有给你太多信息。我们在团队中看到此错误代码的常见原因之一是查询没有得到很好的优化。一个已知的原因是当我们在左侧表的大小大于右侧表的情况下进行内部连接时。在这种情况下,交换这些表通常可以解决问题。

于 2017-09-14T06:58:26.753 回答
2

当我将数据插入指向 Elastic 搜索集群的 HIVE 外部表时,我也遇到了同样的错误。

我将旧 JAR 替换elasticsearch-hadoop-2.0.0.RC1.jarelasticsearch-hadoop-5.6.0.jar,一切正常。

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

感谢这篇文章Hive-Elasticsearch Write Operation #409

于 2017-09-15T08:43:17.727 回答
1

即使我遇到了同样的问题 - 在仪表板上检查时,我发现以下错误。由于数据来自 Flume 并且在两者之间中断,因此可能是少数文件中存在不一致。

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

在更少的文件上运行它可以工作。格式一致性是我的原因。

于 2016-03-29T15:02:19.177 回答
1

我遇到了同样的问题,因为我没有权限查询我试图查询的数据库。

如果您没有查询表/数据库的权限,除了Return Code 2 from org.apache.hadoop.hive.ql.exec.MapRedTask错误之外,您还会看到 Cloudera Manager 甚至没有注册您的查询。

于 2020-05-07T20:33:15.690 回答
0

连接两个表时收到此错误。一个表很大,另一个表很小,可以放入磁盘内存中。在这种情况下,使用

set hive.auto.convert.join = false

这可能有助于摆脱上述错误。有关此问题的更多详细信息,请参阅以下主题

  1. Hive Map-Join 配置之谜
  2. Hive.auto.convert.join = true 这个有什么意义?
于 2021-06-15T12:57:30.097 回答
0

我在直线中创建配置单元表时遇到了同样的错误,然后尝试通过引发实际错误的 spark-shell 创建。在我的情况下,错误是 hdfs 目录的磁盘空间配额。

org.apache.hadoop.ipc.RemoteException:/user/hive/warehouse/XXX_XX.db 的磁盘空间配额已超出:配额 = 6597069766656 B = 6 TB 但磁盘空间已消耗 = 6597493381629 B = 6.00 TB

于 2022-01-05T11:09:21.450 回答