這幾天研究hive表的存儲方式和壓縮模式。在這里做一個簡單的總結
hive表的存儲
樣例 : 我的表:rp_person_house_loan_info
數據總量:1933776
textfile:
(1)hive數據表的默認格式,存儲方式:行存儲 。
(2) 可使用Gzip,Bzip2等壓縮算法壓縮,壓縮后的文件不支持split

上面的數據存儲格式為textfile,文件沒有壓縮總的文件大小為160.1M。
SequenceFile
(1)Hadoop API提供的一種二進制文件,以<key,value>的形式序列化到文件中。存儲方式:行存儲。
(2)支持三種壓縮選擇:NONE,RECORD,BLOCK。Record壓縮率低,一般建議使用BLOCK壓縮。
(3)優勢是文件和hadoop api中的MapFile是相互兼容的

上面數據的存儲模式為sequencefile,總的文件大小為186.86M
RCFile
(1)存儲方式:數據按行分塊,每塊按列存儲。結合了行存儲和列存儲的優點:
(2)首先,RCFile 保證同一行的數據位於同一節點,因此元組重構的開銷很低
(3)其次,像列存儲一樣,RCFile 能夠利用列維度的數據壓縮,並且能跳過不必要的列讀取

上面數據的存儲模式為RCFile,總的文件大小為134.17M
ORCFile
- 存儲方式:數據按行分塊 每塊按照列存儲
- 壓縮快 快速列存取
- 效率比rcfile高,是rcfile的改良版本

上面數據的存儲模式為orc模式,同時啟動了snappy的壓縮模式,總的文件大小為34.48M 下面是orc 的snappy壓縮的表結構:

總結:
我們再建設數據倉庫的時候,通常都是一次寫入,多次讀取
存儲文件的大小的關系:
SequenceFile > TextFile > RCfile
TextFile 默認格式,加載速度最快,可以采用Gzip、bzip2等進行壓縮,壓縮后的文件無法split,即並行處理
SequenceFile 壓縮率最低,查詢速度一般,三種壓縮格式NONE,RECORD,BLOCK
RCfile 壓縮率最高,查詢速度最快,數據加載最慢。
orc (snappy壓縮模式) 查詢速度更快
所以在數據倉庫的建設過程當中盡量的使用orc的這種模式再加上壓縮模式。一方面減少磁盤的使用量,一方面可以實現數據的split(分布式計算),實現查詢速度加快。
建立orc的snappy壓縮模式的建表語句如下:
CREATE TABLE IF NOT EXISTS rp_person_house_loan_info ( loan_no varchar(20), if_me varchar(5) ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS orc tblproperties ("orc.compress"="SNAPPY");
對於其他的模式啟動壓縮的方式:
在插入之前對表的壓縮模式進行設定
set hive.exec.compress.output=true; set mapred.output.compress=true; set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec; set io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec;
