實(shí)用干貨分享(5)- Hive存儲(chǔ)格式及壓縮算法測(cè)試比對(duì)分析
Hive文件存儲(chǔ)格式及優(yōu)缺點(diǎn)
textfile
默認(rèn)的文件格式,行存儲(chǔ)。建表時(shí)不指定存儲(chǔ)格式即為textfile,導(dǎo)入數(shù)據(jù)時(shí)把數(shù)據(jù)文件拷貝至hdfs不進(jìn)行處理。
優(yōu)點(diǎn):最簡(jiǎn)單的數(shù)據(jù)格式,便于和其他工具(pig, grep, sed, awk)共享數(shù)據(jù)、便于查看和編輯;加載較快。
缺點(diǎn):耗費(fèi)存儲(chǔ)空間,I/O性能較低;Hive不進(jìn)行數(shù)據(jù)切分合并,不能進(jìn)行并行操作,查詢效率低。
適用于小型查詢,查看具體數(shù)據(jù)內(nèi)容的測(cè)試操作。
sequencefile
行存儲(chǔ),含有鍵值對(duì)的二進(jìn)制文件。
優(yōu)點(diǎn):可壓縮、可分割,優(yōu)化磁盤利用率和I/O;可并行操作數(shù)據(jù),查詢效率高。
缺點(diǎn):存儲(chǔ)空間消耗最大;對(duì)于Hadoop生態(tài)系統(tǒng)之外的工具不適用,需要通過(guò)text文件轉(zhuǎn)化加載。
rcfile
行列式存儲(chǔ)。先將數(shù)據(jù)按行分塊,同一個(gè)record在一個(gè)塊上,避免讀一條記錄需要讀多個(gè)block;然后塊數(shù)據(jù)列式存儲(chǔ)。
優(yōu)點(diǎn):可壓縮,高效的列存?。徊樵冃瘦^高。
缺點(diǎn):加載時(shí)性能消耗較大,需要通過(guò)text文件轉(zhuǎn)化加載;讀取全量數(shù)據(jù)性能低。
orcfile
優(yōu)化后的rcfile,行列式存儲(chǔ)。優(yōu)缺點(diǎn)與rcfile類似,查詢效率最高。適用于Hive中大型的存儲(chǔ)、查詢。
parquet
列式存儲(chǔ),以二進(jìn)制方式存儲(chǔ)。
優(yōu)點(diǎn):可壓縮,高效的列存??;優(yōu)化I/O。
缺點(diǎn):不支持upadate操作(數(shù)據(jù)寫入后不可更改),不支持ACID。
Hive壓縮算法對(duì)比
Hive壓縮算法包含6種,其中包含default、gzip、bzip2、lzo、lz4、snappy等壓縮格式,具體采用壓縮算法及比對(duì)詳細(xì)如下:
檢查Hadoop本地庫(kù)支持壓縮格式
檢查命令:hadoop checknative
hadoop checknative 命令檢查本地庫(kù)是否支持壓縮,若不支持,需要進(jìn)行源碼編譯將native library編譯進(jìn)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壓縮算法設(shè)置
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;
壓縮算法測(cè)試及結(jié)果比對(duì)
測(cè)試案例
測(cè)試一個(gè)Hive在不同的壓縮格式下進(jìn)行對(duì)壓縮比、查詢效率、插入效率進(jìn)行結(jié)果比對(duì)。
測(cè)試環(huán)境
大數(shù)據(jù)平臺(tái)產(chǎn)品:CDH6.1
節(jié)點(diǎn)個(gè)數(shù):2+6
內(nèi)存:256G
CPU:64核
測(cè)試數(shù)據(jù)
表名稱:ods.o_cor_test
源文件大?。?.8G
查詢速度:19.41S
建表語(yǔ)句:
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
)
測(cè)試方法
本測(cè)試采用每次開啟Hive壓縮模式并設(shè)置Hive的壓縮算法,對(duì)于Hive每種文件存儲(chǔ)格式新建Hive表,并向不同分區(qū)插入數(shù)據(jù),測(cè)試并記錄各種壓縮算法的壓縮效率、查詢速率、插入速度。
注:每次設(shè)置終端退出后設(shè)置無(wú)效。
查詢速率測(cè)試sql語(yǔ)句:
select count(*) from ods.o_cor_test where etl_date=
壓縮算法對(duì)比
測(cè)試結(jié)果
當(dāng)應(yīng)用場(chǎng)景多為查詢時(shí),建議使用orcfile存儲(chǔ)格式且壓縮格式為default。
當(dāng)應(yīng)用場(chǎng)景多為存儲(chǔ)時(shí),建議使用orcfile存儲(chǔ)格式且壓縮格式為bzip2。
當(dāng)應(yīng)用場(chǎng)景多為插入時(shí),建議使用sequencefile存儲(chǔ)格式且壓縮格式為snappy。
一般常用存儲(chǔ)格式為orcfile且壓縮格式為default。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。