Hive 的分桶 & Parquet 概念


分區 & 分桶

都是把數據划分成塊。分區是粗粒度的划分,桶是細粒度的划分,這樣做為了可以讓查詢發生在小范圍的數據上以提高效率。

  • 分區之后,分區列都成了文件目錄,從而查詢時定位到文件目錄,子數據集而提高查詢效率。

  1. 創建:

 

create table zyy_table (id int,name string)
clustered by (id) into 4 buckets;

     clustered by (...) into (...)  buckets  聲明分桶列和桶的個數。

     hive會計算記錄的哈希值,對桶的個數取模,來決定記錄屬於哪個桶 。

 

set hive.enforce.bucketing=true –- 必須設置這個數據,hive才會按照你設置的桶的個數去生成數據

     hive> dfs -ls /user/hive/warehouse/zyy_table;    -- 可以查詢桶文件

drwxrwxr-x+  1 hive hive        111 2016-07-28 19:30 /user/hive/warehouse/test.db/zyy_table/000000_0
drwxrwxr-x+  2 hive hive        120 2016-07-28 19:41 /user/hive/warehouse/test.db/zyy_table/000000_1 -rwxrwxr-x+ 3 hive hive 148 2016-07-28 19:41 /user/hive/warehouse/test.db/zyy_table/000000_2

    對示例數據進行查詢:

— 帶桶的表
select * from zyy_table tablesample(bucket 1 out of 4 on id);

tablesample 可以讓查詢發生在一部分桶上,而不是普通表的查詢(使用rand() 函數,在整個數據集上檢索)

 

parquet  

http://www.infoq.com/cn/articles/in-depth-analysis-of-parquet-column-storage-format/

面向分析型業務的列式存儲格式。

列式存儲相比於行式存儲的優勢:

1. 可以跳過不符合條件的數據,降低IO

2. 壓縮編碼,節省空間。同一列數據類型一樣,可以高效壓縮。

3. 只讀取需要的列,支持向量運算,掃描更有效率。

Parquet的優勢:

日志結構是復雜的嵌套數據類型,而不同的計算框架需要對這些數據做分析和挖掘,存儲和訪問很重要。paquet就是既支持關系型數據類型,又能支持嵌套類型的存儲格式,

同時適配多種數據處理框架(MapReduce, Hive, Pig)。

關系型數據的列式存儲很簡單,一列列排列下來;

嵌套型的列存儲有些復雜。一個record中的column可以是Int Long,String 也可以是List, Map,Set 這樣。(具體需深入)

 


免責聲明!

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



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