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

Posted

技术标签:

【中文标题】什么是 Hive:从 org.apache.hadoop.hive.ql.exec.MapRedTask 返回代码 2【英文标题】:What is Hive: Return Code 2 from org.apache.hadoop.hive.ql.exec.MapRedTask 【发布时间】:2012-06-26 11:36:41 【问题描述】:

我得到:

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

【问题讨论】:

我在查询最近没有进行压缩的 hive 表时看到了这一点。尝试 - 更改表 xyz compact 'MAJOR'; 顺便说一句设置 hive.auto.convert.join=false;修复了我的问题... 就我而言,这个不太有用的错误消息是由于从我没有写入权限的文件夹中运行 hive 所致。切换目录解决了这个问题。 我也遇到过同样的问题,而且我注意到从 Impala 但不是从 Hive 运行相同的查询。然后我浏览了 YARN Container 日志,我意识到 Name 节点处于安全模式 【参考方案1】:

这不是真正的错误,这是找到它的方法:

转到 hadoop jobtracker web-dashboard,找到失败的 hive mapreduce 作业并查看失败任务的日志。这将向您显示真正的错误。

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

希望对您有所帮助。

【讨论】:

嗨@Matthew,这里也发生了同样的事情。我在 Talend 中运行它,这给了我这个错误,但在 HIVE 控制台中,它运行良好。任何线索我该如何恢复。谢谢 有什么方法可以在不使用 web-dashboard 的情况下查看日志? 大声笑,不。你会认为会有,但没有。 Amazon 的 EMR 将所有日志都发送到 S3,因此您可以从 S3 存储桶中获取它们。可能是 yarn 默认将它们放在 HDFS 上,但我不确定如何弄清楚。【参考方案2】:

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

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

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

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

你能帮我在资源管理器中找到日志文件吗?【参考方案4】:

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

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

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

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

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

感谢这个帖子Hive- Elasticsearch Write Operation #409

【讨论】:

您向我们提供了同一问题的特定场景,但遭到了反对,这没有任何意义。我会给你投票。【参考方案7】:

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

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

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

【讨论】:

我遇到了同样的问题。但是 m 找不到日志文件。你能帮我找到日志文件吗?【参考方案8】:

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

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

【讨论】:

【参考方案9】:

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

set hive.auto.convert.join = false

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

    Hive Map-Join configuration mystery Hive.auto.convert.join = true what is the significance of this?

【讨论】:

以上是关于什么是 Hive:从 org.apache.hadoop.hive.ql.exec.MapRedTask 返回代码 2的主要内容,如果未能解决你的问题,请参考以下文章

Hbase常用api

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

数据仓库 Hive 从入门到小牛

通过sqoop工具从hive仓库中导出数据到mysql表中,只有部分数据导出,是什么原因

Sqoop从本地MySQL导入到Hive为啥要求Sqoop一定要在HDFS中

使用spark-submit部署程序时的java.lang.NoSuchMethodError