Hive 调度任务报错FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask

本文分享了在使用Hive进行大数据处理时遇到的内存溢出问题及解决方案。通过调整MapReduce任务的内存参数,成功解决了因数据量过大导致的内存不足问题。

前两天创建调度任务的时候是重新创建表
语句: insert overwrite table
select …
在集群上跑的时候报了这样的错:
Error: Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask (state=08S01,code=2)

然后根据job的id去yarn上面查询了一下日志,发现报错如下:
FATAL [main] org.apache.hadoop.mapred.YarnChild: Error running child : java.lang.OutOfMemoryError: GC overhead limit exceeded

原来是内存溢出了,原因是数据量太大,导致在map的阶段内存不足。这时在SQL语句中加上设置参数的语句

set mapreduce.map.memory.mb=10150; 
set mapreduce.map.java.opts=-Xmx6144m;

当然这种情况还可能出现在reduce的阶段

set mapreduce.reduce.memory.mb=10150; 
set mapreduce.reduce.java.opts=-Xmx8120m;

参数的值自己可调,根据自己的需要设置就好。完结撒花

### 解决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.MapRedTask` 错误时,这通常表明在执行 Hive 查询的过程中,MapReduce 任务未能成功完成。以下是一些可能的原因和解决方案: #### 1. 检查日志文件 错误信息通常存储在 Hive 的日志文件中。默认情况下,Hive 日志文件位于 `/tmp/用户名` 目录下,并按照日期和时间进行存储[^2]。可以使用以下命令查看最新的日志文件内容: ```bash tail -200 hive.log ``` 通过分析日志中的错误信息,可以更准确地定位问题的根源。 #### 2. YARN 资源不足 如果 YARN 的资源不足以支持 MapReduce 任务的运行,可能会导致此错误。可以通过调整 YARN 的虚拟内存与物理内存的比例来解决该问题。具体方法是修改 `yarn-site.xml` 文件中的参数 `yarn.nodemanager.vmem-pmem-ratio`,增加其值以放宽虚拟内存的限制[^3]。例如: ```xml <property> <name>yarn.nodemanager.vmem-pmem-ratio</name> <value>2.5</value> </property> ``` 调整后需要重启 YARN 服务以使更改生效。 #### 3. 数据倾斜问题 数据倾斜可能导致某些任务分配到过多的数据,从而超出资源限制。可以通过以下方式缓解数据倾斜问题: - 使用 `DISTRIBUTE BY` 或 `CLUSTER BY` 重新分布数据。 - 在查询中加入 `SET hive.groupby.skewindata=true;` 来启用倾斜优化[^1]。 #### 4. 检查 HDFS 状态 确保 HDFS 中有足够的可用空间,并且所有数据节点都处于正常工作状态。可以通过以下命令检查 HDFS 的健康状况: ```bash hdfs dfsadmin -report ``` #### 5. 配置 Hive 和 MapReduce 参数 适当调整 Hive 和 MapReduce 的相关参数,以优化任务执行。例如: - 增加 Map 和 Reduce 任务的内存限制: ```bash SET mapreduce.map.memory.mb=2048; SET mapreduce.reduce.memory.mb=4096; ``` - 设置 Map 和 Reduce 任务的 Java 堆大小: ```bash SET mapreduce.map.java.opts=-Xmx1536m; SET mapreduce.reduce.java.opts=-Xmx3072m; ``` #### 6. 检查输入数据格式 确保输入数据的格式正确,且符合 Hive 表的定义。如果数据中存在非法字符或不符合预期的字段类型,可能会导致任务失败[^1]。 #### 示例代码 以下是一个简单的 Hive 查询示例,展示如何设置相关参数以避免任务失败: ```sql SET hive.exec.dynamic.partition.mode=nonstrict; SET mapreduce.map.memory.mb=2048; SET mapreduce.reduce.memory.mb=4096; SET mapreduce.map.java.opts=-Xmx1536m; SET mapreduce.reduce.java.opts=-Xmx3072m; INSERT INTO TABLE target_table PARTITION (partition_column) SELECT * FROM source_table WHERE condition; ``` ### 总结 `Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask` 错误可能是由多种原因引起的,包括 YARN 资源不足、数据倾斜、HDFS 状态异常等。通过检查日志文件、调整资源配置以及优化查询语句,可以有效解决该问题。
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值