1. Hive 分桶表操作
1.1 数据分桶的定义
分桶是相对分区进行更细粒度的划分。
分桶将整个 hive 表数据内容按照某列属性值的 hash 值进行分区,通过分区将这些表数据划分到多个文件中进行存储。
其实桶的概念就是 MapReduce 分区的概念。物理上每个桶就是目录里的一个文件,一个任务作业产生的桶(即:输出文件)数量和设置的 reduce 任务个数相等。
假设有 hive 表:test_student,按照其字段 s_id 属性分为 3 个桶,那么就是对 s_id 属性值的 hash 值对 3 取模,按照取模结果对数据分桶。如取模结果为 0 的数据记录存放到一个文件,取模为 1 的数据存放到一个文件,取模为 2 的数据存放到一个文件。
1.2 数据分桶的意义
-
在处理大规模数据集时,在开发和修改查询阶段,可以使用整个数据集的一部分进行抽样测试查询、修改,提高开发效率;
-
解决单个表文件数据量过大的问题;
-
分桶表数据进行抽样和 JOIN 时可以提高 MapReduce 程序效率;
1.3 实现分桶的步骤
1.3.1 分桶表功能开启
打开 hive 客户端,在 hive 命令行执行以下命令来开启分桶表功能
#开启分桶表的功能
set hive.enforce.bucketing=true;
1.3.2 设置 Reduce 个数
#设置reduce的个数为3
set mapreduce.job.reduces=3;
1.3.3 创建分桶表