分享

Hive 0.13 bucket简介

pig2 2014-11-12 14:54:39 发表于 介绍解说 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 3 11654
问题导读
1.Hive什么是bucket?
2.bucket作用是什么?
3.set hive.enforce.bucketing = true作用是什么?





Hive中不支持对数据的改写和添加,所有的数据都是在加载的时候中确定好的
由于数据的访问延迟较高,决定了 Hive 不适合在线数据查询

Hive  bucket:
hive中table可以拆分partition,table和partition可以通过‘CLUSTERED(聚集) BY ’进一步分bucket,bucket中的数据可以通过‘SORT BY’排序

bucket主要作用:
1. 数据sampling(抽样)
2. 提升某些查询操作效率,例如map side join

需要特别注意的是:clustered by和sorted by不会影响数据的导入,这意味着,用户必须自己负责数据如何如何导入,包括数据的分桶和排序。
'sethive.enforce.bucketing = true' 可以自动控制上一轮reduce的数量从而适配bucket的个数,当然,用户也可以自主设置mapred.reduce.tasks去适配bucket个数,推荐使用'set hive.enforce.bucketing = true'

示例:
建临时表user_tmp并导入数据:
  1. hive> select * from user_tmp;
  2. Id      age     name      stat
  3. 1       20     zxm     20140801
  4. 2       21     ljz       20140801
  5. 3       19     cds      20140801
复制代码



建student表:
  1. hive>create table user(id INT, age INT, nameSTRING)
  2.        >partitionedby(stat_date STRING)
  3.        >clustered by(id) sorted by(age)into 2 bucket
  4.        >row formatdelimited fields terminated by ',';
复制代码



设置环境变量:
  1.        >set hive.enforce.bucketing = true;
复制代码



插入数据:
  1.      >from student_tmp
  2.        >insert overwrite table user partition(stat_date="20140802")
  3.        >select id,age,name where stat_date="20140801" sort by age;
复制代码




查看文件目录:
  1. $ hadoop fs -ls /user/hive/warehouse/usertstat_date=20120802/
  2. Found 2 items
  3. -rw-r--r--   1 work supergroup         31 2014-07-3119:52 /user/hive/warehouse/user/stat_date=20120802/000000_0
  4. -rw-r--r--   1 work supergroup         39 2014-07-3119:52 /user/hive/warehouse/user/stat_date=20120802/000001_0
复制代码




查看sampling数据:
  1. hive>select*from user tablesample( bucket
  2. 1out of 2 on id);                                                                           
  3. Total MapReduce jobs = 1
  4. 4       18     mac     20120802
  5. 2       21     ljz     20120802
  6. 6       23     symbian 20120802
复制代码




tablesample是抽样语句,语法:TABLESAMPLE(BUCKETx OUT OF y)
y必须是table总bucket数的倍数或者因子。hive根据y的大小,决定抽样的比例。

例如,table总共分了64份,当y=32时,抽取(64/32=)2个bucket的数据,当y=128时,抽取(64/128=)1/2个bucket的数据。x表示从哪个bucket开始抽取。例如,table总bucket数为32,tablesample(bucket 3 out of 16),表示总共抽取(32/16=)2个bucket的数据,分别为第3个bucket和第(3+16=)19个bucket的数据。


已有(3)人评论

跳转到指定楼层
凌飞羽 发表于 2014-11-23 10:29:02
学习学习,试装了Hive 0.14,提示版本不成功,只能装 Hive 0.13
回复

使用道具 举报

dayson87 发表于 2014-12-7 16:29:40
看你的帖子比看书都明白,书上都是语焉不详,稀里糊涂的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条