7-hive 分桶

来源:互联网 发布:犀牛建模软件 编辑:程序博客网 时间:2024/05/21 21:36

1. 桶概念

  • 对于每一个表或分区, Hive 可以进一步组织成桶。 Hive 也是针对某一列进行桶的组织。

  • Hive 采用对列值的哈希, 然后以桶的个数求余的方式决定该条记录存放在哪个桶中。

  • 采用桶能够带来一些好处, 比如JOIN 操作。 对于 JOIN 操作两个表有相同的列, 如果对两个表都进行了桶操作。那么将保存列值的桶进行JOIN操作就可以, 可以大大减少JOIN的数据量。

  • hive 中 table 可以拆分成 partition , table 和 partition 可以通过 CLUSTERED BY 进一步分 bucket, bucket 中的数据可以通过 SORT BY 排序。

2. bucket 主要作用:

  • 数据 sampling
  • 提升某些查询操作效率, 例如 mapside join

说明:

需要特别注意的是: clustered by 和 sorted by 不会影响数据的导入。这意味着:用户必须自己负责数据如何导入, 包括数据的分桶和排序。

3. 使用分桶

3.1 准备 :

> set hive.enforce.bucketing=true

可以自动控制上一轮的 reduce 的数量从而适配 bucket 的个数。
用户也可自主设置 mapred.reduce.tasks 去适配 bucket个数

3.2 创建分桶

对 id 列进行hash 分桶

hive (saligia)> CREATE TABLE one(id TINYINT, context STRING)          > CLUSTERED BY(id) INTO 4 BUCKETS          > ROW FORMAT DELIMITED           > FIELDS TERMINATED BY ' '          > STORED AS TEXTFILE ;

3.3 取样

hive (saligia)> SELECT * FROM one TABLESAMPLE(BUCKET 1 OUT OF 10);OKone.id  one.context90  fasdlfkasdf
0 0
原创粉丝点击