Hive:解决Hive创建文件数过多的问题

当Hive操作导致文件数量超过默认限制时,可以通过调整`hive.exec.max.created.files`参数或使用`distribute by rand()`来优化。本文介绍了如何利用`distribute by rand()`避免大量小文件并均衡数据分布,从而提高SQL运行效率。
摘要由CSDN通过智能技术生成

Hive:解决Hive创建文件数过多的问题

distribute by rand()用法

将临时表里数据的按照日期分区插入到线上表,出现了Hive创建的文件数大于100000个的情况,SQL如下:


insert overwrite table test partition(partition_date)
select * 
from table_01

table_01表里共有600多G的数据,一共可以分成80个分区,SQL运行时创建了2200个Mapper,0个Reducers。程序运行时出现以下异常:

报错信息

[Error 20004]: Fatal error occurred when node tried to create 
too many dynamic partitions. The maximum number of dynamic 
partitions is controlled by hive.exec.max.dynamic.partitions and 
hive.exec.max.dynamic.partitions.pernode. Maximum was setto: 150

并最终导致SQL运行失败。错误原因是Hive对创建文件的总数有限制(hive.exec.max.created.files),默认是100000个,而这个SQL在运行时每个Map都会创建80个文件,对应到每个分区,所以这个SQL总共会创建2200 * 80 = 176000个文件,运行中会出现上述异常。为了能成功运行上述SQL,最简单的方法就是加大hive.exec.max.created.files参数的设置。但是有个问题,这会导致产生大量小文件,因为table_01表的数据就

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值