前言
-
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;