1、概述apache
一、桶表是对数据进行哈希取值,而后放到不一样文件中存储。ide
二、数据加载到桶表时,会对字段取hash值,而后与桶的数量取模。把数据放到对应的文件中。oop
三、物理上,每一个桶就是表(或分区)目录里的一个文件,一个做业产生的桶(输出文件)和reduce任务个数相同。spa
四、桶表专门用于抽样查询,是很专业性的,不是平常用来存储数据的表,须要抽样查询时,才建立和使用桶表。code
2、建立桶表orm
这里按照ename来建立桶表,分五个Bucketserver
hive> create table emp_bucket(hadoop
> empno int,string
> ename string,hash
> job string,
> mgr int,
> hiredate string,
> salary float,
> comm float,
> deptno int
> )
> CLUSTERED by (ename) into 5 buckets
> row format delimited fields terminated by ',';
OK
Time taken: 2.856 seconds
3、往桶表中插入数据
特别注意:执行数据插入前,须要设置如下参数
set hive.enforce.bucketing=true;
这里将emp表中的数据插入emp_bucket表
hive> insert into table emp_bucket select * from emp;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask
MapReduce Jobs Launched:
Job 0: Map: 1 Cumulative CPU: 0.67 sec HDFS Read: 1438 HDFS Write: 1313 SUCCESS
Total MapReduce CPU Time Spent: 670 msec
hive> select * from emp_bucket;
OK
7369 SMITH CLERK 7902 1980/12/17 800.0 NULL 20
7499 ALLEN SALESMAN 7698 1981/2/20 1600.0 300.0 30
7521 WARD SALESMAN 7698 1981/2/22 1250.0 500.0 30
7566 JONES MANAGER 7839 1981/4/2 2975.0 NULL 20
7654 MARTIN SALESMAN 7698 1981/9/28 1250.0 1400.0 30
7698 BLAKE MANAGER 7839 1981/5/1 2850.0 NULL 30
7782 CLARK MANAGER 7839 1981/6/9 2450.0 NULL 10
7788 SCOTT ANALYST 7566 1987/4/19 3000.0 NULL 20
7839 KING PRESIDENT NULL 1981/11/17 5000.0 NULL 10
7844 TURNER SALESMAN 7698 1981/9/8 1500.0 0.0 30
4、查看桶表在HDFS中的存放形式
[root@hadoop-server01 ~]# hdfs dfs -ls /user/hive/warehouse/emp_bucket/
-rw-r--r-- 1 root supergroup 92 2018-08-16 20:06 /user/hive/warehouse/emp_bucket/000000_0
-rw-r--r-- 1 root supergroup 189 2018-08-16 20:06 /user/hive/warehouse/emp_bucket/000001_0
-rw-r--r-- 1 root supergroup 378 2018-08-16 20:06 /user/hive/warehouse/emp_bucket/000002_0
-rw-r--r-- 1 root supergroup 282 2018-08-16 20:06 /user/hive/warehouse/emp_bucket/000003_0
-rw-r--r-- 1 root supergroup 372 2018-08-16 20:06 /user/hive/warehouse/emp_bucket/000004_0
能够看出,桶表生成的数据为5各个文件,一个桶表对应一个文件,相同Hash值会存放到同一个桶