hive學習筆記之五:分桶


歡迎訪問我的GitHub

https://github.com/zq2599/blog_demos

內容:所有原創文章分類匯總及配套源碼,涉及Java、Docker、Kubernetes、DevOPS等;

《hive學習筆記》系列導航

  1. 基本數據類型
  2. 復雜數據類型
  3. 內部表和外部表
  4. 分區表
  5. 分桶
  6. HiveQL基礎
  7. 內置函數
  8. Sqoop
  9. 基礎UDF
  10. 用戶自定義聚合函數(UDAF)
  11. UDTF

本篇概覽

本文是《hive學習筆記》的第五篇,前文學習了分區表,很容易發現分區表的問題:

  1. 分區字段的每個值都會創建一個文件夾,值越多文件夾越多;
  2. 不合理的分區會導致有的文件夾下數據過多,有的過少;
    此時可以考慮分桶的方式來分解數據集,分桶原理可以參考MR中的HashPartitioner,將指定字段的值做hash后,根據桶的數量確定該記錄放在哪個桶中,另外,在join查詢和數據取樣時,分桶都能提升查詢效率;
  • 接下來開始實戰;

配置

  1. 執行以下設置,使得hive根據桶的數量自動調整上一輪reducers數量:
set hive.enforce.bucketing = true;
  1. 如果不執行上述設置,您需要自行設置mapred.reduce.tasks參數,以控制reducers數量,本文咱們配置為hive自動調整;

准備數據

接下來先准備外部表t13,往里面添加一些數據,將t13作為后面分桶表的數據源:

  1. 表名t13,只有四個字段:
create external table t13 (name string, age int, province string, city string) 
row format delimited 
fields terminated by ',' 
location '/data/external_t13';
  1. 創建名為013.txt的文件,內容如下:
tom,11,guangdong,guangzhou
jerry,12,guangdong,shenzhen
tony,13,shanxi,xian
john,14,shanxi,hanzhong
  1. 013.txt中的四條記錄載入t13
load data 
local inpath '/home/hadoop/temp/202010/25/013.txt' 
into table t13;

分桶

  1. 創建表t14,指定字段分桶,桶數量為16:
create table t14 (name string, age int, province string, city string) 
clustered by (province, city) into 16 buckets
row format delimited 
fields terminated by ',';
  1. t13導入數據,注意語法是from t13開始,要用overwrite關鍵字:
from t13
insert overwrite table t14 
select name, age, province, city;
  1. 導入過程如下圖所示,可見reducer數量已被自動調整為桶數量:

在這里插入圖片描述

  1. 導入后,查看hdfs,可見被分為16個文件,(和分區對比一下,分區是不同的文件夾):

在這里插入圖片描述

取樣

執行以下語句,取樣查看t14的數據:

hive> select * from t14 tablesample(bucket 1 out of 2 on province, city);
OK
tom	11	guangdong	guangzhou
john	14	shanxi	hanzhong
Time taken: 0.114 seconds, Fetched: 2 row(s)
  • 至此,分桶操作就完成了,基礎知識的實踐已經完成,接下來開始一些進階實踐;

你不孤單,欣宸原創一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 數據庫+中間件系列
  6. DevOps系列

歡迎關注公眾號:程序員欣宸

微信搜索「程序員欣宸」,我是欣宸,期待與您一同暢游Java世界...
https://github.com/zq2599/blog_demos


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM