浅谈Hive的动态分区以及Impala的动态分区

一、需求场景:

当你有一张hive表,里面也有一个字段是时间字段,每天的数据是按这个时间字段导入进去的,这时候你就需要有动态分区这个东西了。分区是在处理大型事实表时常用的方法。分区的好处在于缩小查询扫描范围,从而提高速度。分区分为两种:静态分区static partition和动态分区dynamic partition。静态分区和动态分区的区别在于导入数据时,是手动输入分区名称,还是通过数据来判断数据分区。对于大数据批量导入来说,显然采用动态分区更为简单方便。

二、如何操作

当对hive分区未做设置时,报错如下:

Caused by: org.apache.hadoop.hive.ql.metadata.HiveFatalException: [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 set to: 5000

解决办法:
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.max.dynamic.partitions.pernode=600000;
set hive.exec.max.dynamic.partitions=6000000;
set hive.exec.max.created.files=6000000;

参数名默认值描述
set hive.exec.dynamic.partition=truefalse设置true的时候为打开动态分区
set hive.exec.dynamic.partition.modestrict这个属性默认值是strict,就是要求分区字段必须有一个是静态的分区值,当前设置为nonstrict,那么可以全部动态分区
set hive.exec.max.dynamic.partitions.pernode100能被每个mapper或者reducer创建的最大动态分区的数目,如果一个mapper或者reducer试图创建多余这个值的动态分区数目会引发错误
set hive.exec.max.dynamic.partitions1000被一条带有动态分区的SQL语句所能创建的动态分区总量,总共的最大的动态分区数,如果超出限制会报错  
set hive.exec.max.created.files100000

全局能被创建文件数目的最大值,专门有一个hadoop计数器来跟踪该值,如果超出会报错

impala中插入动态分区表执行sql语句:

insert overwrite table test.page_mv_old_tmp partition(p_point_day,p_point_type)
select data_key
,data_version
,point_day
,point_time
,point_type
,app
,page_id
,page_name
,page_status
,refer_page_id
,openid
,user_id
,uuid
,token
,device_id
,shop_id
,CAST(ware_goods_id AS string)
,p_point_day
,p_point_type
from test.page_mv_old;

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值