Hive之配置使用snappy壓縮

前言

  • OS:CentOS 7

  • hadoop:2.7.7

  • hive:2.3.0

  • Hive中配置snappy壓縮,可以分別在Mapper輸出階段和Reducer輸出階段使用壓縮算法。也可以將壓縮後數據文件加載到表中用於查詢,Hive會通過後綴名自動識別對應的壓縮格式,並在查詢時進行解壓,但需要保持數據文件和表格式相同,否則只會顯示結果全爲NULL


查看本機目前可供Hadoop使用的壓縮算法

使用以下命令,可以查看是否有相應壓縮算法的庫,如果顯示爲false,則需要額外安裝

hadoop checknative -a

PS: Hadoop 2.X版本已經集成了snappy、lz4、bzip2等壓縮算法的編/解碼器,會自動調用對應的本地庫,而CentOS 7中自帶snappy依賴庫,故無需安裝安裝snappy依賴)


開啓Map階段輸出壓縮

Hive中開啓Map階段輸出壓縮,可以減少在Hive中MR Job的Mapper和Reducer之間的網絡I/O。開啓此功能需要同時配置Hive和Hadoop相關參數,可以在Hive中配置,保證僅在當前會話生效,也可以直接在Hive和Hadoop的對應配置文件中修改默認參數持續生效。配置過程如下:

1)開啓Hive中MR中間文件壓縮:

hive> set hive.exec.compress.intermediate=true;

2)開啓Hadoop的MapReduce任務中Map輸出壓縮功能:

hive> set mapreduce.map.output.compress=true;

3)設置Hadoop的MapReduce任務中Map階段壓縮算法(對應的編/解碼器):

hive> set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;

4)至此就完成了Map階段的壓縮配置


開啓Reduce階段輸出壓縮

當Hive將查詢內容寫入到表中(local/hdfs)時,輸出內容同樣可以進行壓縮。同樣需要同時配置Hive和Hadoop參數。既可以在Hive中配置,保證僅在當前會話生效,也可以直接在Hive和Hadoop的對應配置文件中修改默認參數持續生效。配置過程如下:

1)開啓Hive最終查詢結果輸出文件壓縮功能:

hive> set hive.exec.compress.output=true;

2)開啓Hadoop中的MR任務的最終輸出文件壓縮:

hive> set mapreduce.output.fileoutputformat.compress=true;

3)設置Hadoop中MR任務的最終輸出文件壓縮算法(對應的編/解碼器):

hive> set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;

4)設置Hadoop中MR任務序列化文件的壓縮類型,默認爲RECORD即按照記錄RECORD級別壓縮(建議設置成BLOCK):

hive> set mapreduce.output.fileoutputformat.compress.type=BLOCK;

5)執行查詢語句,觀察執行結果文件(後綴名爲.snappy):

hive> insert overwrite local directory '/tmp/hive/data/export/' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' select * from emp;

6)加載本地的縮數據文件到臨時表中:

hive> create table tmp like emp;
hive> load data local inpath '/tmp/hive/data/export/000000_0.snappy' overwrite into table tmp;

7)查詢臨時表結果

hive> select * from tmp;

8)至此就完成了Reduce階段的壓縮配置


End~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章