1. 程式人生 > >Hive的壓縮和儲存

Hive的壓縮和儲存

資料壓縮

開啟Map輸出階段壓縮

開啟map輸出階段壓縮可以減少job中map和Reduce task間資料傳輸量。 在hive中執行: 1)開啟hive中間傳輸資料壓縮功能 hive (default)>set hive.exec.compress.intermediate=true; 2)開啟mapreduce中map輸出壓縮功能 hive (default)>set mapreduce.map.output.compress=true; 3)設定mapreduce中map輸出資料的壓縮方式 hive (default)>set mapreduce.map.output.compress.codec= org.apache.hadoop.io.compress.SnappyCodec;

開啟Reduce輸出階段壓縮

當Hive將輸出寫入到表中時,輸出內容同樣可以進行壓縮。屬性hive.exec.compress.output控制著這個功能。 預設設定檔案中的預設值false,預設的輸出是非壓縮的純文字檔案。

1)開啟hive最終輸出資料壓縮功能 hive (default)>set hive.exec.compress.output=true; 2)開啟mapreduce最終輸出資料壓縮 hive (default)>set mapreduce.output.fileoutputformat.compress=true; 3)設定mapreduce最終資料輸出壓縮方式 hive (default)> set mapreduce.output.fileoutputformat.compress.codec = org.apache.hadoop.io.compress.SnappyCodec; 4)設定mapreduce最終資料輸出壓縮為塊壓縮 hive (default)>set mapreduce.output.fileoutputformat.compress.type=BLOCK;

資料儲存格式

Hive支援的儲存數的格式主要有:TEXTFILE(行式儲存) 、SEQUENCEFILE(行式儲存)、ORC(列式儲存)、PARQUET(列式儲存)。 在這裡插入圖片描述

行儲存的特點: 查詢滿足條件的一整行資料的時候,列儲存則需要去每個聚集的欄位找到對應的每個列的值,行儲存只需要找到其中一個值,其餘的值都在相鄰地方,所以此時行儲存查詢的速度更快。 列儲存的特點: 因為每個欄位的資料聚集儲存,在查詢只需要少數幾個欄位的時候,能大大減少讀取的資料量;每個欄位的資料型別一定是相同的,列式儲存可以針對性的設計更好的設計壓縮演算法。 TEXTFILE和SEQUENCEFILE的儲存格式都是基於行儲存的; ORC和PARQUET是基於列式儲存的。

從儲存檔案的壓縮比和查詢速度兩個角度對比。 儲存檔案的壓縮比: ORC > Parquet > textFile 儲存檔案的查詢速度: ORC > TextFile > Parquet

所以一般選用ORC的儲存格式。 儲存格式設定,可以在建立資料表時進行設定。

建立一個SNAPPY壓縮的ORC儲存方式的表

create table log_orc_snappy(
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS orc tblproperties ("orc.compress"="SNAPPY");