HIVE文件存儲格式的測試比較

根據自身涉及到的數據分佈和使用需求,對HIVE上的三類文件格式做了如下測試,指導HIVE的文件格式選型。測試存在環境、數據分佈、測試偏重點的不同,本測試只供參考,不作爲大家選型決策的絕對指導。

HIVE的三種文件格式:TEXTFILE、SEQUENCEFILE、RCFILE中,TEXTFILE和SEQUENCEFILE的存儲格式都是基於行存儲的,RCFILE是基於行列混合的思想,先按行把數據劃分成N個row group,在row group中對每個列分別進行存儲。

基於HDFS的行存儲具備快速數據加載和動態負載的高適應能力,因爲行存儲保證了相同記錄的所有域都在同一個集羣節點。但是它不太滿足快速的查詢響應時間的要求,因爲當查詢僅僅針對所有列中的少數幾列時,它就不能跳過不需要的列,直接定位到所需列;同時在存儲空間利用上,它也存在一些瓶頸,由於數據表中包含不同類型,不同數據值的列,行存儲不易獲得一個較高的壓縮比。RCFILE是基於SEQUENCEFILE實現的列存儲格式。除了滿足快速數據加載和動態負載高適應的需求外,也解決了SEQUENCEFILE的一些瓶頸。

接下來就針對壓縮比、數據加載、查詢響應角度對HIVE的三種文件格式進行比較,主要比較對象爲SEQUENCEFILE和RCFILE,因爲TEXTFILE在壓縮後不能發揮MapReduce的並行處理能力,所以此文件格式不會被我們採用。

壓縮比
測試數據爲1月11號產品表的當前數據,利用此數據保存到三張表,分別採用三種文件格式,壓縮方式統一爲gzip
存儲格式               文件大小
TEXTFILE               21.4GB
SEQUENCEFILE           22.3GB
RCFILE                 18.0GB
RCFILE的壓縮比優於SEQUENCEFILE。
【原】HIVE文件存儲格式的測試比較
上圖是HADOOP的不同壓縮方法的一個性能對比圖(摘自《pro hadoop》第5章),其中gzip是空間和時間比較折中的壓縮方法,後續測試也反應了這一點。

數據加載
【原】HIVE文件存儲格式的測試比較
上圖是三類文件格式的數據插入不同壓縮類型,不同文件格式的數據加載時間對比圖。
1.同一份數據的加載時間爲lzo < gzip < bz2和不同壓縮方式性能對比圖的結果一致。
2.目標表爲SEQUENCEFILE的數據加載時間優於TEXTFILE和RCFILE。

查詢響應
測試1:
數據表wp_product_target包含62個字段,字段類型包含:BIGINT、DOUBLE、STRING。
執行如下兩種SQL查詢:
方案一,測試整行記錄的查詢效率
select * from wp_product_target where product_id like '480523%';
方案二,測試特定列的查詢效率
select product_id, gmt_create, dw_end_date from wp_product_target where product_id like '480523%';
【原】HIVE文件存儲格式的測試比較

上圖反映了RCFILE的查詢效率都優於SEQUENCEFILE。
測試2:
數據表wp_product_detail包含8個字段,只取了product_id和description兩個字段做測試。product_id的數據佔用存儲爲:447MB,description的數據佔用存儲爲:89697MB。
本測試目的是驗證RCFILE的數據讀取方式和Lazy解壓方式是否有性能優勢。數據讀取方式只讀取元數據和相關的列,節省IO;Lazy解壓方式只解壓相關的列數據,對不滿足where條件的查詢數據不進行解壓,IO和效率都有優勢。
方案一:
insert overwrite local directory '/home/dwapp/hugh.wangp'
select product_id, description
from wp_product_detail
where product_id like '480523%';
方案二:
insert overwrite local directory '/home/dwapp/hugh.wangp'
select product_id, description
from wp_product_detail
where substr(product_id, 1, 2) = '50';
方案三:
insert overwrite local directory '/home/dwapp/hugh.wangp'
select product_id, description
from wp_product_detail_sf;
方案四:
insert overwrite local directory '/home/dwapp/hugh.wangp'
select product_id
from wp_product_detail;
前三個方案的查詢數據量:800條,700萬條,1.8億條。
【原】HIVE文件存儲格式的測試比較
上圖反應在大小數據集上,RCFILE的查詢效率高於SEQUENCEFILE。
【原】HIVE文件存儲格式的測試比較

上圖反應在特定字段數據讀取時,RCFILE的查詢效率依然優於SEQUENCEFILE。

總結
1.在壓縮比方面,RCFILE有較優的壓縮比,因爲SEQUENCEFILE是行壓縮,行內不同數據值統一壓縮,但是RCFILE對每列獨立壓縮,避免了不同數據值的混合壓縮,所以壓縮比相對高一些。但是由於對列進行壓縮存儲,壓縮性能比單單對行進行壓縮消耗更多。也正體現了壓縮的空間和時間的矛盾體。
2.數據加載方面,SEQUENCEFILE優於RCFILE,因爲RCFILE的列壓縮方式,數據加載壓縮時的性能消耗比較大。但是對於數據倉庫的一次寫入、多次讀取,數據的加載性能對整體利用影響沒有壓縮比和查詢響應大。
3.查詢響應方面,RCFILE有較優的表現。RCFILE的數據讀取方式和Lazy解壓方式起到了很大的作用,在讀取數據的每個行組時,RCFILE只需讀取元數據頭部和查詢指定的列,而不是行組的全部數據都讀到內存中,節省了很多的I/O。雖然讀取了元數據頭部和查詢指定的列,但是不是對這些數據完全解壓,Lazy解壓技術保證了,只解壓滿足where條件的數據。

總之,相對於SEQUENCEFILE,RCFILE的壓縮比有20%左右的提升,數據加載時間有10%左右的劣勢,查詢響應時間平均有15%左右的優勢,尤其在大數據量的非全字段查詢上有30%左右的性能優勢。
所以從上面的測試比較可以看出,RCFILE是HIVE最適合的文件存儲格式,壓縮方式採用GZIP壓縮。
業界使用情況,FACEBOOK目前所有HIVE的文件全部採用RCFILE存儲,國內的盛大也採用RCFILE存儲。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章