博客專欄

EEPW首頁 > 博客 > 實用干貨分享(5)- Hive存儲格式及壓縮算法測試比對分析

實用干貨分享(5)- Hive存儲格式及壓縮算法測試比對分析

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

 編輯

 

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



關鍵詞: 干貨

技術專區(qū)

關閉