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值會存放到同一個桶