天天看點

[Hive] Hive表壓縮

目錄

(1)壓縮概述

(2)開啟Map輸出階段壓縮

(3)開啟Reduce輸出階段壓縮

(4)建立表時指定壓縮格式

(1)壓縮概述

MR支援的壓縮編碼,表1

[Hive] Hive表壓縮

為了支援多種壓縮/解壓縮算法,Hadoop引入了編碼/解碼器,表2

[Hive] Hive表壓縮

壓縮性能的比較,表3

[Hive] Hive表壓縮

注:表1,表2,表3來自網絡。

假如有一個表:

create table emp_t(

id int,

name String,

deptno int)

row format delimited

fields terminated by ','

collection items terminated by '-'

map keys terminated by ':'

stored as textfile;

(2)開啟Map輸出階段壓縮

開啟map輸出階段壓縮可以減少job中Map和Reduce task間資料傳輸量。具體配置如下:

案例實操:

開啟hive中間傳輸資料壓縮功能

set hive.exec.compress.intermediate=true;

開啟mapreduce中map輸出壓縮功能

set mapreduce.map.output.compress=true;

設定mapreduce中map輸出資料的壓縮方式

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

執行查詢語句

select count(1) as name from emp_t;

(3)開啟Reduce輸出階段壓縮

當Hive将輸出寫入到表中時,輸出内容同樣可以進行壓縮。屬性hive.exec.compress.output控制着這個功能。使用者可能需要保持預設設定檔案中的預設值false,這樣預設的輸出就是非壓縮的純文字檔案了。使用者可以通過在查詢語句或執行腳本中設定這個值為true,來開啟輸出結果壓縮功能。

案例實操:

開啟hive最終輸出資料壓縮功能,預設false

set hive.exec.compress.output=true;

開啟mapreduce最終輸出資料壓縮,預設false

set mapreduce.output.fileoutputformat.compress=true;

設定mapreduce最終資料輸出壓縮方式,

預設:mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.DeflateCodec

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

設定mapreduce最終資料輸出壓縮為塊壓縮(NONE 、RECORD、BLOCK)

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

剛建立表時,hdfs中沒有檔案

[Hive] Hive表壓縮

插入資料後插入資料,檔案格式為snappy:

insert into emp_t(id,name,deptno)values(1,'zhangsan',1);

[Hive] Hive表壓縮

關閉mapreduce壓縮後插入資料,檔案格式為textfile:

insert into emp_t(id,name,deptno)values(2,'zhangsan',1);

[Hive] Hive表壓縮

(4)建立表時指定壓縮格式

建立表時指定壓縮格式和通過設定Reduce輸出階段壓縮的功能一樣。

create table emp_t1(

id int,

name String,

deptno int)

row format delimited

fields terminated by ','

collection items terminated by '-'

map keys terminated by ':'

STORED AS orc tblproperties ("orc.compress"="Snappy");

插入資料:

insert into emp_t1(id,name,deptno)values(2,'zhangsan',1);

檢視HDFS的檔案:

[Hive] Hive表壓縮

繼續閱讀