异常信息:org.apache.hive.service.cli.HiveSQLException: Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask

我的问题是:可以创建表,可以删除表,可以给表导入数据,可以查询数据,但是不能使用insert插入数据,即便数据量只有一条也不行(只要不是mr,能本地执行成功都没问题)。

我的解决办法:

修改 haddop 里面的配置文件 mapred-site.xml,添加下面配置

<!-- mr运行需要的配置,分别是 appmanger,map,reduce的环境  -->
<!-- 不配置会导致mr无法运行  -->
 <property>
  <name>yarn.app.mapreduce.am.env</name>
  <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
  <name>mapreduce.map.env</name>
  <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
  <name>mapreduce.reduce.env</name>
  <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

你的问题可能不一样,如果解决不了,我说说我解决这个问题的思路,也许你能找到你的问题是怎么出现的。

hive的异常报的很不明显,只收提示异常return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask。这是一类异常,我甚至感觉只要mr执行失败都是这个异常,是一个很不明显的异常。

既然是hadoop那边的异常,并且hive看不出是什么异常,那就去查hadoop的日志,盲猜和执行节点或者资源分配节点的日志里面可能有写有你能够提供帮助的日志,查询到resourcemanager日志有如下信息

2024-03-21 09:58:11,846 INFO org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppImpl: Application application_1710986047084_0001 failed 2 times due to AM Container for appattempt_1710986047084_0001_000002 exited with  exitCode: 1
Failing this attempt.Diagnostics: [2024-03-21 09:58:11.803]Exception from container-launch.
Container id: container_1710986047084_0001_02_000001
Exit code: 1

[2024-03-21 09:58:11.828]Container exited with a non-zero exit code 1. Error file: prelaunch.err.
Last 4096 bytes of prelaunch.err :
Last 4096 bytes of stderr :
Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster

Please check whether your <HADOOP_HOME>/etc/hadoop/mapred-site.xml contains the below configuration:
<property>
  <name>yarn.app.mapreduce.am.env</name>
  <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
</property>
<property>
  <name>mapreduce.map.env</name>
  <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
</property>
<property>
  <name>mapreduce.reduce.env</name>
  <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
</property>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.

看了日志就很明显了,都已经说了确认下下面的配置有没有配置,按照提示配置就行了。

为啥我一开始没有怀疑是hadoop的问题呢?因为我的hadoop不是现在安装的,是之前配合hbase使用的,后来也用它配合flink跑过一些分布式计算,所以我一开始根本没怀疑hadoop出现问题 ,使用hbase 说明存储没问题,跑了分布式计算下意识我就觉得mr没问题(flink的计算引擎不是mr,是自己的计算引擎,flink只是用hadoop的分布式存储和yarn作为资源分配器)。

想到可能是mr的问题以后,跑了一个hadoop 自带的mr例子,果然也报错,回头看了一下hive任务执行的时候hadoop的日志,也有同样异常信息。

日志是最能提解决问题方向的东西,前提是你要找对日志,如果找到的一些没啥意义的日志,那就事倍公半了。