初试动态分区

创建一张静态分区表


create table par_tab_static1 (name string,nation string) 
partitioned by (sex string) 
row format delimited fields terminated by ',';

man
=================================
jan,china                       
mary,america
lilei,china
heyong,china
yiku,japan
emoji,japan

woman
=================================
lily,china
nancy,china

hanmeimei,america

将man&woman的数据加载上去,并分别用sex='man' sex='woman'来进行分区,结果如下


接下来我们创建第二个静态分区表,但分区字段跟后面的动态分区的一样,表里的已有字段不能作为分区字段,不然会报错的

create table par_tab_static2 (name string,nation string) 
partitioned by (sex string,dt string) 

row format delimited fields terminated by ',';

数据和上面的一样,但是加载数据的时候,用sex,dt对其进行分区

load data local inpath '/opt/module/apache/hive-1.2.1/data/all_man' into table par_tab_static2 partition by (sex='man',dt='2017-3-28');

load data local inpath '/opt/module/apache/hive-1.2.1/data/all_man' into table par_tab_static2 partition by (sex='man',dt='2017-3-29');

结果如下


创建动态分区表,使用第二个静态分区的表结构,因为我们也按dt这个字段进行动态分区

create table if not exists par_tab_dynamic like par_tab_static2; 

加载数据并进行动态分区

insert overwrite table par_tab_dynamic partition(sex='man',dt)    select name, nation, dt from par_tab_static2;

==>因为我这里是唯一值man所以不加sex='man',也行


经过漫长的MapReduce后我们查询目录的结果如下


我们再来看看他的分区结构


可以看到,这里在我们没有指定dt的具体值得时候,我们就实现了相同dt的自动分区,到这里就是动态分区最简单作用,学习就是得不断记录,以后再来看看,肯定感觉不一样,哈哈


========================================================================

分阶段聚合(二次聚合)

select id,sum(count) as sum from (
select id,count(*) as count from (
select *,abs(hash(x)) % 200 as hashid from A join B on a.id = b.id
)
group by id,url,hashid
)
group by id,url

数据倾斜的原因之一   key值得分布不均匀,group by的维度太小,

具体表现

任务进度长时间维持在99%(或100%),查看任务监控页面,发现只有少量(1个或几个)reduce子任务未完成。因为其处理的数据量和其他reduce差异过大。

单一reduce的记录数与平均的记录数差异过大,通常可能达到很多倍,远远大于平均时长


通过二次聚合加上随机值,先聚合一次,再去掉随机值,再聚合一次,用随机值解决数据倾斜,保证每个reduce的数据量都差不多大,这样就避免了单一reduce 数据量过大的问题。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值