Bucket
1.对于每一个表(table)或者分区(partition), Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive也是 针对某一列进行桶的组织。Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。

2,把表(或者分区)组织成桶(Bucket)有两个理由:
(1)获得更高的查询处理效率。桶为表加上了额外的结构,Hive 在处理有些查询时能利用这个结构。
具体而言,连接两个在(包含连接列的)相同列上划分了桶的表,可以使用 Map 端连接 (Map-side join)高效的实现。
比如JOIN操作。对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了桶操作。
那么将保存相同列值的桶进行JOIN操作就可以,可以大大较少JOIN的数据量。
(2)使取样(sampling)更高效。在处理大规模数据集时,在开发和修改查询的阶段,
如果能在数据集的一小部分数据上试运行查询,会带来很多方便。
下面来一个例子:

Create table dz_test(id  bigint  comment’编号’,(ps:comment为注释)name string comment’姓名’
)comment’编号与姓名表’
Partitioned by(pdate string)
Clustered by(id)     按id分桶,自动哈希分桶
Sorted by(id)   按id排序
Into 4 buckets   分成4个桶
Row format delimited 设置创建的表在加载数据的时候,支持的列分隔符
Fields terminated by ‘\t’  每个字段按\t分割
Lines terminated by’\n’ stored as textfile; 按\n为断行符,指定导入的文件为纯文本。
Hive本身支持的文件格式只有:Text File,Sequence File,如果数据需要压缩,使用 [STORED AS SEQUENCE]

下面load数据:
插入数据之前需要设置参数hive.enforce.bucketing=true,以强制hive的reducer数目为分桶数。
如果不设置这个hive参数,最后的桶个数可能不是建表语句中的个数。
另外,也可以通过将参数mapred.reduce.tasks设置为桶的数目来控制reducer的数目,建议采用第一种方式。

Set hive.enforce.bucketing=true;
Load data local inpath’/home/Hadoop/….’ overwrite into table dz_test partition(pdate=‘2015-10’)

物理上,每个桶就是表(或分区)目录里的一个文件。它的文件名并不重要,但是桶 n 是按照字典序排列的第 n 个文件。
事实上,桶对应于 MapReduce 的输出文件分区:一个作业产生的桶(输出文件)和reduce任务个数相同。

我们可以通过查看刚才 创建的bucketd_users表的布局来了解这一情况。运行如下命令:

查看表的结构:
hive> dfs -ls /user/hive/warehouse/dz_test;
将显示有4个新建的文件。文件名如下(文件名包含时间戳,由Hive产生,因此 每次运行都会改变):
attempt_201701221636_0016_r_000000_0
attempt_201701221636_0016_r-000001_0
attempt_201701221636_0016_r_000002_0
attempt_201701221636_0016_r_000003_0
第一个桶里包括用户ID和4,因为一个INT的哈希值就是这个整数本身,在这里 除以桶数(4)以后的余数:2
读取数据,看每一个文件的数据:
hive> dfs -cat /user/hive/warehouse/dz_test/*0_0;
0 Nat
4 Ann
用TABLESAMPLE子句对表进行取样,我们可以获得相同的结果。这个子句会将 查询限定在表的一部分桶内,而不是使用整个表:
. 对桶中的数据进行采样:
hive> SELECT * FROM dz_test
>TABLESAMPLE(BUCKET 1 OUT OF 4 ON id);
0 Nat
4 Ann
桶的个数从1开始计数。因此,前面的查询从4个桶的第一个中获取所有的用户。
对于一个大规模的、均匀分布的数据集,这会返回表中约四分之一的数据行。
我们也可以用其他比例对若干个桶进行取样(因为取样并不是一个精确的操作,因此这个 比例不一定要是桶数的整数倍)。
例如,下面的查询返回一半的桶:
7. 查询一半返回的桶数:
hive> SELECT * FROM dz_test
>    TABLESAMPLE(BUCKET 1 OUT OF 2 ON id);
0 Nat
4 Ann
2 Joe
因为查询只需要读取和TABLESAMPLE子句匹配的桶,所以取样分桶表是非常高效 的操作。
如果使用rand()函数对没有划分成桶的表进行取样,即使只需要读取很 小一部分样本,也要扫描整个输入数据集:
hive〉 SELECT * FROM dz_test
> TABLESAMPLE(BUCKET 1 OUT OF 4 ON rand());
2 Doe
①从Hive 0.6.0开始,对以前的版本,必须把mapred.reduce .tasks设为表中要填 充的桶的个数。
如果桶是排序的,还需要把hive.enforce.sorting设为true。
②显式原始文件时,因为分隔字符是一个不能打印的控制字符,因此字段都挤在一起。 

https://blog.csdn.net/m0_37534613/article/details/55258928

Hive分桶之BUCKET详解相关推荐

  1. 十大经典排序算法-桶排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  2. 大数据学习笔记42:Hive - 分桶表

    文章目录 一.Hive分桶表 1.分桶操作 2.分桶原理 3.注意事项 二.分桶表案例演示 1.创建数据文件courses.txt 2.将数据文件上传到HDFS的/bucket目录 3.基于/buck ...

  3. Hive分桶(bucket)

    一 什么是桶的概念,和分区有啥区别? 对于每一个表或者分区,可以进一步细分成桶,桶是对数据进行更细粒度的划分.默认时对某一列进行hash,使用hashcode对 桶的个数求模取余,确定哪一条记录进入哪 ...

  4. HIVE-分桶表的详解和创建实例

    我们学习一下分桶表,其实分区和分桶这两个概念对于初学者来说是比较难理解的.但对于理解了的人来说,发现又是如此简单. 我们先建立一个分桶表,并尝试直接上传一个数据 create table studen ...

  5. hive分桶表join_Hive:JOIN及JOIN优化 2015.10.25

    1. Join的基本原理 大家都知道,Hive会将所有的SQL查询转化为Map/Reduce作业运行于Hadoop集群之上.在这里简要介绍Hive将Join转化为Map/Reduce的基本原理(其它查 ...

  6. 大数据之hive:hive分桶表

    目录 一.回顾分区表 二.为什么分桶? 三.分桶表的使用 1.创建一个带分桶定义的表(分桶表) 2.加载数据: 3.对分桶表的查询 分桶总结: 实例 一.回顾分区表 为什么有分区? 随着系统运行时间增 ...

  7. 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解

    引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单 ...

  8. 全方位揭秘!大数据从0到1的完美落地之Hive分桶

    分桶的概述 为什么要分桶 数据分区可能导致有些分区数据过多,有些分区数据极少.分桶是将数据集分解为若干部分(数据文件)的另一种技术. 分区和分桶其实都是对数据更细粒度的管理.当单个分区或者表中的数据越 ...

  9. Hive 分桶表原理及优化大表 join 实战

    一.什么是分桶表 分桶表,比普通表或者分区表有着更为细粒度的数据划分. 举个例子,每天产生的日志可以建立分区表,每个分区在 hdfs 上就是一个目录,这个目录下包含了当天的所有日志记录. 而分桶表,可 ...

最新文章

  1. cmake通过命令行构建静态库/动态库
  2. 尝试引用已删除的函数_学Excel函数公式,你必须要掌握这些知识
  3. java 返回js_如何基于java或js获取URL返回状态码
  4. 汤姆克兰西全境封锁服务器维护时间,汤姆克兰西全境封锁无法登录怎么解决 无法登录解决方法攻略...
  5. 变电站计算机在线监控系统,变电站环境在线监测系统
  6. 微信官方回应iOS 13.2频繁杀后台问题:建议先不升级
  7. odbc数据源的配置
  8. 计算机的神奇功能华为,接上线就变PC!华为Mate 10的电脑模式究竟好用不?
  9. 微信小游戏破解(2)之《我要猫咪》
  10. 矢量网络分析仪VNA的校准之SOLT方法
  11. android wifi热点setting
  12. EPICS -- pyDevice
  13. 「2020年大学生电子设计竞赛分享」电源题,省一等奖!
  14. python爬取QQ空间好友说说并生成词云
  15. U盘Linux启动引导
  16. matlab对信号的滤波方法
  17. 干货!基于层次适应的零样本学习
  18. 嵌入式 Linux 开发工具篇问题整理//C语言测试(杨辉三角、递归调用实现阶乘、计算器、统计字符串出现次数)//2018.07.12.//
  19. 安霸S2LM系列SD卡支持
  20. LiFi比WiFi快100倍:它如何运作,实际应用靠谱吗

热门文章

  1. GE CimplicityV11.1安装步骤
  2. thinkpad S3笔记本无线网速慢的解决方案
  3. 知识图谱总体构建思路(流程图)
  4. 卡尔曼滤波器的实用方法及其实现方法
  5. libevent的使用流程
  6. matlab 颜色对应三原色(转)
  7. Ironic-Python-Agent
  8. PHP使用ffmpeg压缩视频
  9. MD5 转码 实现加密解密
  10. 出走的门徒之七—驭势 吴甘沙:一步十年