HIVE存儲格式

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 階段的排序過程。

Parquet

Apache Parquet是Hadoop生態圈中一種新型列式存儲格式,它可以兼容Hadoop生態圈中大多數計算框架(Mapreduce、Spark等),被多種查詢引擎支持(Hive、Impala、Drill等),並且它是語言和平臺無關的。Parquet最初是由Twitter和Cloudera合作開發完成並開源,2015年5月從Apache的孵化器裏畢業成爲Apache頂級項目。Parquet文件是以二進制方式存儲的,是不可以直接讀取和修改的,Parquet文件是自解析的,文件中包括該文件的數據和元數據。

RCFile

RCFile是Hive推出的一種專門面向列的數據格式。 它遵循“先按行劃分,再垂直劃分”的設計理念。當查詢過程中,針對它並不關心的列時,它會在IO上跳過這些列。需要說明的是,RCFile在map階段從 遠端拷貝仍然是拷貝整個數據塊,並且拷貝到本地目錄後RCFile並不是真正直接跳過不需要的列,並跳到需要讀取的列, 而是通過掃描每一個row group的頭部定義來實現的,但是在整個HDFS Block 級別的頭部並沒有定義每個列從哪個row group起始到哪個row group結束。所以在讀取所有列的情況下,RCFile的性能反而沒有SequenceFile高。

ORC文件格式

ORC文件格式是一種Hadoop生態圈中的列式存儲格式,它的產生早在2013年初,最初產生自Apache Hive,用於降低Hadoop數據存儲空間和加速Hive查詢速度。和Parquet類似,它並不是一個單純的列式存儲格式,仍然是首先根據行組分割整個表,在每一個行組內進行按列存儲。ORC文件是自描述的,它的元數據使用Protocol Buffers序列化,並且文件中的數據儘可能的壓縮以降低存儲空間的消耗,目前也被Spark SQL、Presto等查詢引擎支持,但是Impala對於ORC目前沒有支持,仍然使用Parquet作爲主要的列式存儲格式。2015年ORC項目被Apache項目基金會提升爲Apache頂級項目。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章