Hive Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out.

本文介绍了解决Hive查询过程中出现的shuffle错误的方法。当文件过大导致内存分配不足时,可通过调整集群内存大小来解决此问题。

hive查询时,报错Error: org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: error in shuffle in fetcher#2
Hive Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out.
系统设置有关,文件较大,无法分配大内存
通过调整集群内存大小解决问题。

Hive 中,`macros.hive.max_partition` 并非标准的 Hive 参数,你想说的可能是 `hive.exec.max.dynamic.partitions` 和 `hive.exec.max.dynamic.partitions.pernode`,这两个参数用于控制动态分区的数量,当动态分区数量超过这两个参数的限制时,就会出现分区错误。以下是解决动态分区出现分区错误的方法: ### 调整参数值 可以适当增大 `hive.exec.max.dynamic.partitions` 和 `hive.exec.max.dynamic.partitions.pernode` 的值。这两个参数的默认值分别是 1000 和 100。可以在 Hive 客户端执行以下命令来调整参数: ```sql -- 设置每个节点允许创建的最大动态分区数 set hive.exec.max.dynamic.partitions.pernode=5000; -- 设置全局允许创建的最大动态分区数 set hive.exec.max.dynamic.partitions=10000; ``` ### 检查数据分布 动态分区错误可能是由于数据分布不均匀导致某些节点产生过多的分区。可以通过以下方式检查数据分布: ```sql -- 查看分区列的分布情况 SELECT partition_column, COUNT(*) FROM your_table GROUP BY partition_column; ``` 根据数据分布情况,对数据进行预处理,如使用 Hive 的 `DISTRIBUTE BY` 和 `SORT BY` 关键字对数据进行重新分布: ```sql INSERT OVERWRITE TABLE your_table PARTITION(partition_column) SELECT col1, col2, partition_column FROM your_source_table DISTRIBUTE BY partition_column SORT BY partition_column; ``` ### 优化查询 确保查询语句没有不必要的动态分区生成。例如,避免在不必要的情况下使用动态分区插入大量数据。可以考虑分批次插入数据,或者使用静态分区和动态分区结合的方式。 ```sql -- 静态分区和动态分区结合 INSERT OVERWRITE TABLE your_table PARTITION(partition_column='static_value') SELECT col1, col2 FROM your_source_table WHERE partition_column='static_value'; ``` ### 检查 HDFS 权限 确保 Hive 用户对 HDFS 上的目标目录有足够的权限来创建分区。可以使用以下命令检查和修改权限: ```bash hdfs dfs -chmod -R 775 /user/hive/warehouse/your_table ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值