- Hadoop數據倉庫實戰
- 肖睿 蘭偉 廖春瓊主編
- 1038字
- 2025-04-02 16:30:19
1.2.1 Hive存儲格式
Hive中的數據分為真實數據與元數據,一般來說Hive的存儲格式是指真實數據的存儲格式。
Hive常用的存儲格式包括以下4種:TEXTFILE、SEQUENCEFILE、RCFILE和ORCFILE。
1. TEXTFILE
常見的txt、csv、tsv等文件都屬于TEXTFILE。Hive默認存儲格式為TEXTFILE,即創建表時如果不單獨指定存儲格式,則認為存儲格式為TEXTFILE。存儲格式為按行存儲,內容為普通的文本格式,一般可以使用cat命令直接查看。TEXTFILE格式的數據文件無須任何處理即可導入Hive,文件每一行為一條記錄,記錄可用任意分隔符進行列分割,記錄之間須以行結束符分割。Hive將TEXTFILE映射為表的過程中,將會逐個字符地判斷是否為列分隔符或行分隔符。
TEXTFILE支持使用Gzip壓縮,但Gzip壓縮后的文件將不再支持MapReduce分割機制,這意味著壓縮后的文件不論有多少個HDFS塊都只能被一個Map任務處理,即失去了使用集群并行處理的優勢。
2. SEQUENCEFILE
SEQUENCEFILE是Hadoop提供的一種由“二進制序列化過的Key/Value字節流”組成的文本存儲文件格式。其由于內容為二進制字節,所以無法通過cat命令查看原始字符,這可以抽象地理解為,在SEQUENCEFILE中每條記錄均以鍵值對的方式進行存儲,僅支持追加。與TEXTFILE類似,SEQUENCEFILE同樣按行存儲。
Hive無法直接導入SEQUENCEFILE格式的數據文件。數據須首先導入至TEXTFILE格式的表中,然后再從TEXTFILE格式的表中采用插入方式導入至SEQUENCEFILE格式的表。
SEQUENCEFILE是可分割的文件格式,支持3種壓縮選項。
(1)NONE:不壓縮。
(2)RECORD(默認選項):記錄級壓縮,壓縮率低。
(3)BLOCK:塊級壓縮,壓縮率高。
3. RCFILE
RCFILE(Record-Columnar File)是Facebook開發的一種專門面向列的數據存儲格式,不同于TEXTFILE和SEQUENCEFILE,RCFILE是基于行列混合存儲思想的設計。
RCFILE遵循“先水平劃分,再垂直劃分”的設計理念:首先把Hive表水平切分成多個行組,保證同一行的數據位于同一節點,其次在行組內按照“列”垂直切分,實現列與列的數據在磁盤上呈現為連續的存儲塊。使用RCFILE的優勢是既保證了每條記錄所有列在同一個HDFS塊,也可以做到當查詢僅針對表中的少數幾列時,可跳過不必要的列進行數據讀取。RCFILE存儲格式如圖1.4所示。

圖1.4 RCFILE存儲格式
注意
與SEQUENCEFILE類似,Hive在導入RCFILE格式的數據文件時也需要經過TEXTFILE轉換。
RCFILE是可分割的文件格式,即在每個行組中,元數據頭部(Metadata Header)和表格數據段會被分別壓縮。對于元數據頭部而言,RCFILE會使用行程長度編碼(Run Length Encoding,RLE)算法壓縮數據,而對于表格數據段而言,其每個列會通過Gzip壓縮算法獨立壓縮。
4. ORCFILE
ORCFILE(Optimized Row-Columnar File)是對RCFILE的優化,可以提供一種高效的方法來存儲Hive數據。ORCFILE的特點是:支持壓縮比很高的壓縮算法,文件可切分,提供多種索引,支持復雜的數據結構。
除了上面4種常見數據存儲格式外,Hive還支持Parquet、Avro等格式,更多Hive存儲格式的相關內容請掃描二維碼獲取。

Hive存儲格式