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

What is Hive: Return Code 2 from org.apache.hadoop.hive.ql.exec.MapRedTask

我得到:

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

在尝试使用 hive 控制台中的命令创建分区表的副本??时:

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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


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

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

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

希望对您有所帮助。


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

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

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

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


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

enter image description here

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

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


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

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

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

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


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


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


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

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


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

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

运行在更少的文件上。格式一致性是我的原因。


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

org.apache.hadoop.ipc.RemoteException: The DiskSpace quota of /user/hive/warehouse/XXX_XX.db is exceeded: quota = 6597069766656 B = 6 TB but diskspace consumed = 6597493381629 B = 6.00 TB


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

set hive.auto.convert.join = false

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

  • Hive Map-Join 配置之谜
  • Hive.auto.convert.join = true 这个有什么意义?