1. TextFile
默認格式,存儲方式為行存儲,數據不做壓縮,磁盤開銷大,數據解析開銷大。可結合 Gzip、Bzip2 使用(系統自動檢查,執行查詢時自動解壓),但使用 這種方式,壓縮后的文件不支持 split,Hive 不會對數據進行切分,從而無法對數據進行并行操作。并且在反序列化過程中,必須逐個字符判斷是不是分隔符和行結束符,因此反序列化開銷會比 SequenceFile 高幾十倍?
2. SequenceFile
SequenceFile 是 Hadoop API 提供的一種二進制文件支持,存儲方式為行存儲,其具有使用方便、可分割、可壓縮的特點。
SequenceFile 支持三種壓縮選擇:NONE,RECORD,BLOCK。Record 壓縮率低,一般建議使用 BLOCK 壓縮。
優勢是文件和 hadoop api 中的 MapFile 是相互兼容的 。
3、RCFile
存儲方式:數據按行分塊,每塊按列存儲。結合了行存儲和列存儲的優點:
首先,RCFile 保證同一行的數據位于同一節點,因此元組重構的開銷很低 ;
其次,像列存儲一樣,RCFile 能夠利用列維度的數據壓縮,并且能跳過不必要的列讀取;
4、ORCFile(下文詳細闡述)
存儲方式:數據按行分塊 每塊按照列存儲。
壓縮快、快速列存取。
效率比 RCfile 高,是 RCfile 的改良版本。
5、Parquet
Parquet文件是以二進制方式存儲的,所以是不可以直接讀取的,文件中包括該文件的數據和元數據,因此Parquet格式文件是自解析的。
Apache Parquet 最初的設計動機是存儲嵌套式數據,比如Protocolbuffer thrift json 等 將這類數據存儲成列式格式以方便對其高效壓縮和編碼,且使用更少的IO操作取出需要的數據
總結:
相比 TEXTFILE 和 SEQUENCEFILE,RCFILE 由于列式存儲方式,數據加載時性能消耗較大,但是具有較好的壓縮比和查詢響應。
數據倉庫的特點是一次寫入、多次讀取,因此,整體來看,RCFILE 相比其余兩種格式具有較明顯的優勢。