實用干貨分享(5)- Hive存儲格式及壓縮算法測試比對分析
Hive文件存儲格式及優(yōu)缺點
textfile
默認的文件格式,行存儲。建表時不指定存儲格式即為textfile,導入數據時把數據文件拷貝至hdfs不進行處理。
優(yōu)點:最簡單的數據格式,便于和其他工具(pig, grep, sed, awk)共享數據、便于查看和編輯;加載較快。
缺點:耗費存儲空間,I/O性能較低;Hive不進行數據切分合并,不能進行并行操作,查詢效率低。
適用于小型查詢,查看具體數據內容的測試操作。
sequencefile
行存儲,含有鍵值對的二進制文件。
優(yōu)點:可壓縮、可分割,優(yōu)化磁盤利用率和I/O;可并行操作數據,查詢效率高。
缺點:存儲空間消耗最大;對于Hadoop生態(tài)系統(tǒng)之外的工具不適用,需要通過text文件轉化加載。
rcfile
行列式存儲。先將數據按行分塊,同一個record在一個塊上,避免讀一條記錄需要讀多個block;然后塊數據列式存儲。
優(yōu)點:可壓縮,高效的列存??;查詢效率較高。
缺點:加載時性能消耗較大,需要通過text文件轉化加載;讀取全量數據性能低。
orcfile
優(yōu)化后的rcfile,行列式存儲。優(yōu)缺點與rcfile類似,查詢效率最高。適用于Hive中大型的存儲、查詢。
parquet
列式存儲,以二進制方式存儲。
優(yōu)點:可壓縮,高效的列存??;優(yōu)化I/O。
缺點:不支持upadate操作(數據寫入后不可更改),不支持ACID。
Hive壓縮算法對比
Hive壓縮算法包含6種,其中包含default、gzip、bzip2、lzo、lz4、snappy等壓縮格式,具體采用壓縮算法及比對詳細如下:
檢查Hadoop本地庫支持壓縮格式
檢查命令:hadoop checknative
hadoop checknative 命令檢查本地庫是否支持壓縮,若不支持,需要進行源碼編譯將native library編譯進Hadoop。
native library checking:
hadoop: true /opt/cloudera/parcels/cdh-6.1.0-1.cdh6.1.0.p0.770702/lib/hadoop/lib/native/libhadoop.so.1.0.0
zlib: true /lib64/libz.so.1
zstd: true /opt/cloudera/parcels/cdh-6.1.0-1.cdh6.1.0.p0.770702/lib/hadoop/lib/native/libzstd.so.1
snappy: true /opt/cloudera/parcels/cdh-6.1.0-1.cdh6.1.0.p0.770702/lib/hadoop/lib/native/libsnappy.so.1
lz4: true revision:10301
bzip2: true /lib64/libbz2.so.1
openssl: true /lib64/libcrypto.so
isa-l: true /opt/cloudera/parcels/cdh-6.1.0-1.cdh6.1.0.p0.770702/lib/hadoop/lib/native/libisal.so.2
Hive壓縮算法設置
default壓縮格式
set hive.exec.compress.output=true;
set mapred.output.compress=true;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.defaultcodec;
gzip壓縮格式
set hive.exec.compress.output=true;
set mapred.output.compress=true;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.gzipcodec;
bzip2壓縮格式
set hive.exec.compress.output=true;
set mapred.output.compress=true;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.bzip2codec;
lzo壓縮格式
set hive.exec.compress.output=true;
set mapred.output.compress=true;
set mapred.output.compression.codec=com.hadoop.compression.lzo.lzopcodec;
lz4壓縮格式
set hive.exec.compress.output=true;
set mapred.output.compress=true;
set mapred.output.compression.codec= org.apache.hadoop.io.compress.lz4pcodec;
snappy壓縮格式
set hive.exec.compress.output=true;
set mapred.compress.map.output=true;
set mapred.output.compress=true;
set mapred.output.compression=org.apache.hadoop.io.compress.snappycodec;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.snappycodec;
set io.compression.codecs=org.apache.hadoop.io.compress.snappycodec;
壓縮算法測試及結果比對
測試案例
測試一個Hive在不同的壓縮格式下進行對壓縮比、查詢效率、插入效率進行結果比對。
測試環(huán)境
大數據平臺產品:CDH6.1
節(jié)點個數:2+6
內存:256G
CPU:64核
測試數據
表名稱:ods.o_cor_test
源文件大?。?.8G
查詢速度:19.41S
建表語句:
CREATE TABLE ODS.O_COR_TEST
( BOOK_ID STRING,
EVENT_ID STRING,
TRX_ID_IN STRING,
TRX_ID_OUT STRING,
LINE_ID STRING,
HEADER_ID STRING,
BATCH_ID STRING,
BOOK_TYPE STRING,
ASSET_TYPE STRING,
CATEGORY_ID STRING,
INTERFACE_CONTROL_ID_IN STRING,
INTERFACE_CONTROL_ID_OUT STRING,
EFFECTIVE_DATE DATE,
INEFFECTIVE_DATE DATE,
DATA_DATE DATE,
ACCOUNTING_DATE DATE,
EVENT_TYPE STRING,
ACTIVE_CODE STRING,
AMORTIZED_COST STRING,
FAIR_COST STRING,
CONTACT_IN STRING,
CONTACT_OUT STRING,
COST STRING,
INT STRING,
INT_ADJUST STRING,
EVALUATION_ADJUST STRING,
FAIR_COST_ADJUST STRING,
CV_RESERVE STRING,
RV_RESERVE STRING,
HV_RESERVE STRING,
RA_COST STRING,
LEASE_COST STRING,
LEASE_CV_RESERVE STRING,
LEASE_RV_RESERVE STRING,
LEASE_HV_RESERVE STRING,
INVESTMENT_INCOME STRING,
INVESTMENT_LOSS STRING,
FAIR_COST_GAIN_LOSS STRING,
V_LOSS STRING,
OTHER_INCOME STRING,
ORIGINAL STRING,
TRANS_INT_IN STRING,
TRANS_INT_OUT STRING,
INT_ACCRUED STRING,
EXPENSE STRING,
RECOV_ORIGINAL STRING,
RECOV_TRANS_INT_IN STRING,
RECOV_TRANS_INT_OUT STRING,
RECOV_INT_ACCRUED STRING,
RECOV_EXPENSE STRING,
LOSS_ORIGINAL STRING,
LOSS_TRANS_INT_IN STRING,
LOSS_TRANS_INT_OUT STRING,
LOSS_INT_ACCRUED STRING,
LOSS_EXPENSE STRING,
LEASE_ORIGINAL STRING,
GUARANTEE1 STRING,
GUARANTEE2 STRING,
GUARANTEE3 STRING,
BALANCE_OUT STRING,
LY_INVESTMENT_INCOME STRING,
LY_INVESTMENT_LOSS STRING,
LY_FAIR_COST_GAIN_LOSS STRING,
LY_V_LOSS STRING,
LAST_UPDATE_DATE DATE,
LAST_UPDATED_BY STRING,
CREATION_DATE DATE,
CREATED_BY STRING,
LAST_UPDATE_LOGIN STRING,
ATTRIBUTE_CATEGORY STRING,
ATTRIBUTE1 STRING,
ATTRIBUTE2 STRING,
ATTRIBUTE3 STRING,
ATTRIBUTE4 STRING,
ATTRIBUTE5 STRING,
ATTRIBUTE6 STRING,
ATTRIBUTE7 STRING,
ATTRIBUTE8 STRING,
ATTRIBUTE9 STRING,
ATTRIBUTE10 STRING,
INT_AMORTIZED STRING,
START_DATE DATE,
END_DATE DATE,
DEL_FLAG STRING
)
測試方法
本測試采用每次開啟Hive壓縮模式并設置Hive的壓縮算法,對于Hive每種文件存儲格式新建Hive表,并向不同分區(qū)插入數據,測試并記錄各種壓縮算法的壓縮效率、查詢速率、插入速度。
注:每次設置終端退出后設置無效。
查詢速率測試sql語句:
select count(*) from ods.o_cor_test where etl_date=
壓縮算法對比
測試結果
當應用場景多為查詢時,建議使用orcfile存儲格式且壓縮格式為default。
當應用場景多為存儲時,建議使用orcfile存儲格式且壓縮格式為bzip2。
當應用場景多為插入時,建議使用sequencefile存儲格式且壓縮格式為snappy。
一般常用存儲格式為orcfile且壓縮格式為default。
*博客內容為網友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯(lián)系工作人員刪除。