Hive中的文件格式
1-TEXTFILE
- 文本格式,Hive的默認格式,數據不壓縮,磁盤開銷大、數據解析開銷大。
- 對應的hive API為:org.apache.hadoop.mapred.TextInputFormat和org.apache.hive.ql.io.HiveIgnoreKeyTextOutputFormat;
- 可結合Gzip、Bzip2使用(系統自動檢查,執行查詢時自動解壓),但是使用這種方式,hive不會對數據進行切分,從而無法對數據進行並行操作
2-SequenceFile
- Hadoop提供的二進制文件,Hadoop支持的標准文件;
- 數據直接序列化到文件中,SequenceFile文件不能直接查看,可以通過Hadoop fs -text查看;
- SequenceFile具有使用方便、可分割、可壓縮、可進行切片,壓縮支持NONE、RECORD、BLOCK(優先);
- 對應hive API:org.apache.hadoop.mapred.SequenceFileInputFormat和org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
3-RCFILE
- rcfile是一種行列存儲相結合的存儲方式,先將數據按行進行分塊再按列式存儲,保證同一條記錄在一個塊上,避免讀取多個塊,有利於數據壓縮和快速進行列存儲;
- 對應 hive API為:org.apache.hadoop.hive.ql.io.RCFileInputFormat和org.apache.hadoop.hive.ql.io.RCFileOutputFormat
4-orcfile
- orcfile式對rcfile的優化,可以提高hive的讀寫、數據處理性能、提供更高的壓縮效率;
- 優點:
- 每個task只輸出單個文件,減少namenode負載;
- 支持各種復雜的數據類型,比如:datetime,decima以及復雜類型struct、list、map;
- 文件中存儲了一些輕量級的索引數據;
- 基於數據類型的塊模式壓縮:integer類型的列用行程長度編碼,string類型的列使用字典編碼;
- 用多個相互獨立的recordReaders並行讀相同的文件
- 無需掃描markers即可分割文件
- 綁定讀寫所需內存
- metadata存儲用protocol buffers,支持添加和刪除列
5-parquet
- Parquet也是一種列式存儲,同時具有很好的壓縮性能;同時可以減少大量的表掃描和反序列化的時間。
總結
- textfile 存儲空間消耗比較大,並且壓縮的text 無法分割和合並 查詢的效率最低,可以直接存儲,加載數據的速度最高;
- sequencefile 存儲空間消耗最大,壓縮的文件可以分割和合並 查詢效率高,需要通過text文件轉化來加載;
- orcfile, rcfile存儲空間最小,查詢的效率最高 ,需要通過text文件轉化來加載,加載的速度最低;
- parquet格式是列式存儲,有很好的壓縮性能和表掃描功能;
SequenceFile,ORCFile(ORC),rcfile格式的表不能直接從本地文件導入數據,數據要先導入到textfile格式的表中,然后再從textfile表中導入到SequenceFile,ORCFile(ORC),rcfile表中。
Hive支持的壓縮格式
-
Hive支持的壓縮格式為Gzip、Bzip2、lzo、snappy
壓縮特點.jpg