本文共 1290 字,大约阅读时间需要 4 分钟。
本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!
本专栏目录结构和参考文献请见
分桶是相对分区进行更细粒度的划分。
分桶将整个数据内容安装某列属性值取 hash 值进行区分,具有相同 hash 值的数据进入到同一个文件中。
比如按照 name 属性分为3个桶,就是对 name 属性值的 hash 值对 3 取摸,按照取模结果对数据分桶。
取模结果为 0 的数据记录存放到一个文件
取模结果为 1 的数据记录存放到一个文件
取模结果为 2 的数据记录存放到一个文件
取模结果为 3 的数据记录存放到一个文件
# 在创建分桶表之前要执行命令> set hive.enforce.bucketing=true; //开启对分桶表的支持> set mapreduce.job.reduces=4; //设置与桶相同的reduce个数(默认只有一个reduce)
--分桶表create table user_buckets_demo(id int, name string)clustered by(id) into 4 buckets row format delimited fields terminated by '\t';--普通表create table user_demo(id int, name string)row format delimited fields terminated by '\t';
1 laowang12 laowang23 laowang34 laowang45 laowang56 laowang67 laowang78 laowang89 laowang910 laowang10
load data local inpath '/opt/bigdata/data/buckets.txt' into table user_demo;
insert into table user_buckets_demo select * from user_demo;
tablesample(bucket x out of y)
- x表示从第几个桶开始取数据 - y表示桶数的倍数,一共需要从 桶数/y 个桶中取数据select * from user_buckets_demo tablesample(bucket 1 out of 2)-- 需要的总桶数=4/2=2个-- 先从第1个桶中取出数据-- 再从第1+2=3个桶中取出数据
转载地址:http://vzgji.baihongyu.com/