hive 动态分区踩坑记

坑1:动态分区字段要放在最后

set hive.auto.convert.join=true;
set hive.exec.parallel=true;  
set hive.exec.dynamic.partition =true;
set hive.exec.dynamic.partition.mode = nonstrict;
--set hive.exec.max.dynamic.partitions=20000;

insert overwrite table dw.kaka_test partition(cal_dt)
select 
 cal_dt
,guid
,user_id
from dw.kaka_test_01
where cal_dt>='2021-03-20'

报错内容:

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 set to: 100

一开始没有加set hive.exec.max.dynamic.partitions=20000,
以为是参数问题,加上以后还是报错,后来经查询发现动态分区字段需要放在最后

2:动态分区相关参数

set hive.exec.dynamic.partition =true; 是否启动动态分区 默认false
set hive.exec.dynamic.partition.mode = nonstrict;
	动态分区类型,strict 要求至少包含一个静态分区列,nonstrict则无此要求
set hive.exec.max.dynamic.partitions=20000  最大动态分区数,默认1000
set hive.exec.max.dynamic.partitions.pernode = 1000,
	一个 mapreduce job所允许的最大的动态分区的个数。默认是100

坑2:跑180天数据的时候,报oom的错

代码如上,参数是180天,报错截图如下,
在这里插入图片描述
后代码最后一行加上distribute by cal_dt后运行成功

set hive.auto.convert.join=true;
set hive.exec.parallel=true;  
set hive.exec.dynamic.partition =true;
set hive.exec.dynamic.partition.mode = nonstrict;
--set hive.exec.max.dynamic.partitions=20000;

insert overwrite table dw.kaka_test partition(cal_dt)
select 
guid
,user_id
,cal_dt
from dw.kaka_test_01
where cal_dt>='2020-09-01'
distribute	by cal_dt

原因:
distribute by 是控制map端如何拆分数据给reduce端的,hive会根据distribute的key 默认hash分发,多分区map端会有大量小文件,reduce输出文件大小不均,小文件过多,文件超大等情况。通过参数调优的合并小文件在这里依然会报错,原因本茶树菇还没弄清楚,即使加了distribute by 还是会报错,真的是要了狗命了,求路过的大佬指点三四

小tips
(1)、尽量不要用动态分区,因为动态分区的时候,将会为每一个分区分配reducer数量,当分区数量多的时候,reducer数量将会增加,对服务器是一种灾难。
(2)、动态分区和静态分区的区别,静态分区不管有没有数据都将会创建该分区,动态分区是有结果集将创建,否则不创建。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值