博客專欄

EEPW首頁(yè) > 博客 > 實(shí)用干貨分享(5)- Hive存儲(chǔ)格式及壓縮算法測(cè)試比對(duì)分析

實(shí)用干貨分享(5)- Hive存儲(chǔ)格式及壓縮算法測(cè)試比對(duì)分析

發(fā)布人:中電金信人 時(shí)間:2022-06-05 來(lái)源:工程師 發(fā)布文章

 編輯

 

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)系工作人員刪除。



關(guān)鍵詞: 干貨

技術(shù)專區(qū)

關(guān)閉