当前位置:   article > 正文

在hive插入数据时出现“Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask”报错

execution error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.mapred

一.问题重现

  1. SQL 错误 [2] [08S01]: Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
  2. Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
  3. Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask

二.问题分析

这个错误代码表明 Hive 作业由于某种原因失败。

   1.资源问题: 这个错误可能发生在集群上存在资源约束的情况下,例如内存或 CPU 资源不足以完成 Hive 作业。

   2.数据问题: 它可能与数据本身相关。例如,数据可能损坏,或者数据格式或模式存在问题,Hive 无法处理。

   3.配置问题: 不正确的 Hive 或 Hadoop 配置设置可能导致作业失败。

   4.查询错误: 可能是与你尝试执行的 SQL 查询相关的问题。例如,它可能存在语法错误,或者尝试执行 Hive 不支持的操作。

   5.权限问题: 你可能没有执行你尝试执行的操作所需的权限。

   6.版本冲突:hive和Hadoop版本不兼容。

三.问题解决

为了解决这个问题我们可以尝试以下步骤:

  1. 检查 Hive 日志以获取有关问题性质的更多详细错误消息。这些日志可以提供有关问题的额外信息。

  2. 检查你的 SQL 查询,确保它是正确的,并适用于你正在处理的数据和模式。

  3. 验证你是否具有访问和操作数据所需的权限。

  4. 确保你的 Hive 和 Hadoop 配置正确设置。

  5. 如果错误与数据有关,请检查数据是否存在问题,如损坏、缺失值或不正确的格式。

  6. 考虑咨询你的 Hadoop 或 Hive 管理员以获取进一步的故障排除帮助。
  7. 检查集群的资源利用情况,看集群资源是否充足。例如CPU和内存

        如果确定是集群资源不足,可以在hadoop/etc/hadoop/yarn-site.sh配置文件添加以下内容

  1. <!--yarn单个容器允许分配的最大最小内存 -->
  2. <property>
  3. <name>yarn.scheduler.minimum-allocation-mb</name>
  4. <value>512</value>
  5. </property>
  6. <property>
  7. <name>yarn.scheduler.maximum-allocation-mb</name>
  8. <value>4096</value>
  9. </property>
  10. <!-- yarn容器允许管理的物理内存大小 -->
  11. <property>
  12. <name>yarn.nodemanager.resource.memory-mb</name>
  13. <value>4096</value>
  14. </property>
  15. <!-- 关闭yarn对物理内存和虚拟内存的限制检查 -->
  16. <property>
  17. <name>yarn.nodemanager.pmem-check-enabled</name>
  18. <value>true</value>
  19. </property>
  20. <property>
  21. <name>yarn.nodemanager.vmem-check-enabled</name>
  22. <value>false</value>
  23. </property>

排除以上问题之后问题没有解决,如果你插入数据是很多字段,可以尝试减少字段插入数据

例如

    这是我原本插入的数据的SQL语句

  1. -- 插入数据
  2. insert overwrite table dw_didi.t_user_order_wide partition(dt='2020-04-12')
  3. select
  4. orderid,telephone,lng,lat,province,city,es_money,gender,profession,age_range,tip,subscribe,
  5. case when subscribe = 0 then '非预约'
  6. when subscribe = 1 then '预约'
  7. end as subscribe_name,sub_time,is_agent,
  8. case when is_agent = 0 then '本人'
  9. when is_agent = 1 then '代叫'
  10. end as is_agent_name,
  11. agent_telephone,
  12. date_format(concat(order_time,':00'),'yyyy-MM-dd') as order_date,
  13. year(date_format(concat(order_time,':00'),'yyyy-MM-dd:ss')) as order_year,
  14. month(date_format(concat(order_time,':00'),'yyyy-MM-dd:ss'))as order_month,
  15. day(date_format(concat(order_time,':00'),'yyyy-MM-dd:ss'))as order_day,
  16. hour(date_format(concat(order_time,':00'),'yyyy-MM-dd HH:mm:ss'))as order_hour,
  17. case when hour(date_format(concat(order_time,':00'),'yyyy-MM-dd HH:mm:ss')) > 1 and hour (date_format(concat(order_time,':00'),'yyyy-MM-dd HH:mm:ss')) <= 5 then '凌晨'
  18. when hour(date_format(concat(order_time,':00'),'yyyy-MM-dd HH:mm:ss')) > 5 and hour (date_format(concat(order_time,':00'),'yyyy-MM-dd HH:mm:ss')) <= 8 then '早上'
  19. when hour(date_format(concat(order_time,':00'),'yyyy-MM-dd HH:mm:ss')) > 8 and hour (date_format(concat(order_time,':00'),'yyyy-MM-dd HH:mm:ss')) <= 11 then '上午'
  20. when hour(date_format(concat(order_time,':00'),'yyyy-MM-dd HH:mm:ss')) > 11 and hour (date_format(concat(order_time,':00'),'yyyy-MM-dd HH:mm:ss')) <= 13 then '中午'
  21. when hour(date_format(concat(order_time,':00'),'yyyy-MM-dd HH:mm:ss')) > 13 and hour (date_format(concat(order_time,':00'),'yyyy-MM-dd HH:mm:ss')) <= 17 then '下午'
  22. when hour(date_format(concat(order_time,':00'),'yyyy-MM-dd HH:mm:ss')) > 17 and hour (date_format(concat(order_time,':00'),'yyyy-MM-dd HH:mm:ss')) <= 19 then '晚上'
  23. when hour(date_format(concat(order_time,':00'),'yyyy-MM-dd HH:mm:ss')) > 19 and hour (date_format(concat(order_time,':00'),'yyyy-MM-dd HH:mm:ss')) <= 20 then '半夜'
  24. when hour(date_format(concat(order_time,':00'),'yyyy-MM-dd HH:mm:ss')) > 20 and hour (date_format(concat(order_time,':00'),'yyyy-MM-dd HH:mm:ss')) <= 24 then '深夜'
  25. when hour(date_format(concat(order_time,':00'),'yyyy-MM-dd HH:mm:ss')) > 0 and hour (date_format(concat(order_time,':00'),'yyyy-MM-dd HH:mm:ss')) <= 1 then '深夜'
  26. else 'N/A'
  27. end as order_time_range,
  28. date_format(concat(concat(order_time,':00'),':00'),'yyyy-MM-dd HH:mm:ss') as order_time
  29. from ods_didi.t_user_order WHERE dt = '2020-04-12' and length(order_time) > 8;
  30. SELECT * from dw_didi.t_user_order_wide

现在改为

  1. insert overwrite table dw_didi.wide1 partition(dt='2020-04-12')
  2. select
  3. orderid
  4. from ods_didi.t_user_order WHERE dt = '2020-04-12' and length(order_time) > 8;
  5. SELECT * from dw_didi.wide1

如果尝试运行之后还是报相同错误

就可以基本判定是hive配置文件的错误

检查配置文件后,如果还是报错,我们可以尝试设置hive的执行引擎

1.下载tez的依赖包:http://tez.apache.org

2.拷贝apache-tez-0.9.1-bin.tar.gz到hadoop102的/export/software目录

3.解压缩apache-tez-0.9.1-bin.tar.gz

tar -zxvf apache-tez-0.9.1-bin.tar.gz -C /export/servers

4.进入到Hive的配置目录

/hive/conf

5.在hive-env.sh文件中添加tez环境变量配置和依赖包环境变量配置

vim hive-env.sh
  1. export TEZ_HOME=/export/servers/tez-0.9.1 #是你的tez的解压目录
  2. export TEZ_JARS=""
  3. for jar in `ls $TEZ_HOME |grep jar`; do
  4. export TEZ_JARS=$TEZ_JARS:$TEZ_HOME/$jar
  5. done
  6. for jar in `ls $TEZ_HOME/lib`; do
  7. export TEZ_JARS=$TEZ_JARS:$TEZ_HOME/lib/$jar
  8. done
  9. export HIVE_AUX_JARS_PATH=/export/servers/hadoop-2.7.7/share/hadoop/common/hadoop-lzo-0.4.20.jar$TEZ_JARS

6.在hive-site.xml文件中添加如下配置,更改hive计算引擎

  1. <property>
  2. <name>hive.execution.engine</name>
  3. <value>tez</value>
  4. </property>

7.在Hive的/export/servers/hive/conf下面创建一个tez-site.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4. <property>
  5. <name>tez.lib.uris</name> <value>${fs.defaultFS}/tez/tez-0.9.1,${fs.defaultFS}/tez/tez-0.9.1/lib</value>
  6. </property>
  7. <property>
  8. <name>tez.lib.uris.classpath</name> <value>${fs.defaultFS}/tez/tez-0.9.1,${fs.defaultFS}/tez/tez-0.9.1/lib</value>
  9. </property>
  10. <property>
  11. <name>tez.use.cluster.hadoop-libs</name>
  12. <value>true</value>
  13. </property>
  14. <property>
  15. <name>tez.history.logging.service.class</name> <value>org.apache.tez.dag.history.logging.ats.ATSHistoryLoggingService</value>
  16. </property>
  17. </configuration>

8.将/export/servers/tez-0.9.1上传到HDFS的/tez路径

  1. hadoop fs -mkdir /tez
  2. hadoop fs -put /export/servers/tez-0.9.1/ /tez
  3. hadoop fs -ls /tez查看结果是这个
  4. /tez/tez-0.9.1

运行Tez时检查到用过多内存而被NodeManager杀死进程问题:

  1. Caused by: org.apache.tez.dag.api.SessionNotRunning: TezSession has already shutdown. Application application_1546781144082_0005 failed 2 times due to AM Container for appattempt_1546781144082_0005_000002 exited with exitCode: -103
  2. For more detailed output, check application tracking page:http://hadoop102:8088/cluster/app/application_1546781144082_0005Then, click on links to logs of each attempt.
  3. Diagnostics: Container [pid=11116,containerID=container_1546781144082_0005_02_000001] is running beyond virtual memory limits. Current usage: 216.3 MB of 1 GB physical memory used; 2.6 GB of 2.1 GB virtual memory used. Killing container.

解决方法:

  1. <property>
  2. <name>yarn.nodemanager.vmem-check-enabled</name>
  3. <value>false</value>
  4. </property>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/85931
推荐阅读
相关标签
  

闽ICP备14008679号