hive 数据存储格式详解
Hive的三種文件格式:TEXTFILE、SEQUENCEFILE、RCFILE中,TEXTFILE和SEQUENCEFILE的存儲格式都是基于行存儲的,RCFILE是基于行列混合的思想,先按行把數據劃分成N個row group,在row group中對每個列分別進行存儲。另:hive能支持自定義格式,詳情見:Hive文件存儲格式
基于HDFS的行存儲具備快速數據加載和動態負載的高適應能力,因為行存儲保證了相同記錄的所有域都在同一個集群節點。但是它不太滿足快速的查詢響應時間的要求,因為當查詢僅僅針對所有列中的 少數幾列時,它就不能跳過不需要的列,直接定位到所需列;同時在存儲空間利用上,它也存在一些瓶頸,由于數據表中包含不同類型,不同數據值的列,行存儲不 易獲得一個較高的壓縮比。RCFILE是基于SEQUENCEFILE實現的列存儲格式。除了滿足快速數據加載和動態負載高適應的需求外,也解決了SEQUENCEFILE的一些瓶頸;
? ?做個簡單介紹
TextFile:
?
Hive默認格式,數據不做壓縮,磁盤開銷大,數據解析開銷大。
可結合Gzip、Bzip2、Snappy等使用(系統自動檢查,執行查詢時自動解壓),但使用這種方式,hive不會對數據進行切分,從而無法對數據進行并行操作。
?
SequenceFile:
SequenceFile是Hadoop?API 提供的一種二進制文件,它將數據以<key,value>的形式序列化到文件中。這種二進制文件內部使用hadoop?的標準的Writable 接口實現序列化和反序列化。它與Hadoop API中的MapFile 是互相兼容的。Hive 中的SequenceFile 繼承自Hadoop API 的SequenceFile,不過它的key為空,使用value 存放實際的值, 這樣是為了避免MR 在運行map 階段的排序過程。
??
RCFile
RCFile是Hive推出的一種專門面向列的數據格式。 它遵循“先按列劃分,再垂直劃分”的設計理念。當查詢過程中,針對它并不關心的列時,它會在IO上跳過這些列。需要說明的是,RCFile在map階段從 遠端拷貝仍然是拷貝整個數據塊,并且拷貝到本地目錄后RCFile并不是真正直接跳過不需要的列,并跳到需要讀取的列, 而是通過掃描每一個row group的頭部定義來實現的,但是在整個HDFS Block 級別的頭部并沒有定義每個列從哪個row group起始到哪個row group結束。所以在讀取所有列的情況下,RCFile的性能反而沒有SequenceFile高。
? ?基于Hadoop系統行存儲結構的優點在于快速數據加載和動態負載的高適應能力,這是因為行存儲保證了相同記錄的所有域都在同一個集群節點,即同一個 HDFS塊。不過,行存儲的缺點也是顯而易見的,例如它不能支持快速查詢處理,因為當查詢僅僅針對多列表中的少數幾列時,它不能跳過不必要的列讀取;此 外,由于混合著不同數據值的列,行存儲不易獲得一個極高的壓縮比,即空間利用率不易大幅提高。
? ? ?結論:?表現反應在大小數據集上,RCFILE的查詢效率高于SEQUENCEFILE,在特定字段數據讀取時,RCFILE的查詢效率依然優于SEQUENCEFILE;
? ?原文出自 csdn博客?http://blog.csdn.net/czw698/article/?
轉載于:https://blog.51cto.com/xingyue2011/1958919
總結
以上是生活随笔為你收集整理的hive 数据存储格式详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第一季度Teradata营收下降7.3%
- 下一篇: 【Python】内置方法pop