1. 程式人生 > >hive分桶管理

hive分桶管理

分桶:按照使用者建立表時指定的分桶欄位進行hash雜湊多個檔案

1.hive分桶的原理

跟MR中的HashPartitioner的原理一模一樣

         MR中:按照key的hash值去模除以reductTask的個數

         Hive中:按照分桶欄位的hash值去模除以分桶的個數


2.hive分桶的作用

好處:
1、方便抽樣
2、提高join查詢效率

3.hive分桶和分割槽的區別

分桶表和分割槽表的 桶數 和 分割槽數的 決定機制:

分桶表的個數:由使用者的HQL語句所設定的reduceTask的個數決定

表的分割槽的個數:也能由使用者自定義指定。也能由程式自動生成, 分割槽是可以動態增長的

分桶表和分割槽表的個數的區別:
分桶表是一經決定,就不能更改,所以如果要改變桶數,要重新插入分桶資料
分割槽數是可以動態增長的
log日誌
一天存一個分割槽

分桶表和分割槽表中資料的表現:
1、分桶表中的每個分桶中的資料可以有多個key值
2、分割槽表中的每個分割槽只有一個 key值

4.hive分桶的操作

首先建立一個分桶的空表,注意:是分桶的空表

然後建立個臨時表,往臨時表匯入資料

然後在從臨時表中分桶查詢出來的資料insert到分桶的空表裡

4.1建立分桶表

create table bck_student(id int,name string,sex string, age int,department string) clustered by(sex) into 2 buckets row format delimited fields terminated  by ",";

4.2建立臨時表並匯入資料

create table student(id int,name string,sex string, age int,department string)  row format delimited fields terminated  by ",";
load data local inpath "/home/hadoop/student.dat"  into table student;
select * from sutdent;

4.3從臨時表中分桶查詢出來的資料insert到分桶的空表裡

開啟分桶 set  hive.enforce.bucketing =true; set mapreduce.job.reduces=2;  注意:上面程式碼中的set mapreduce.job.reduces的數量要和分桶數量一樣 insert into table bck_student select id,name,sex,age,department from student distribute by sex;  

4.4檢視分桶結果