自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Hive中壓縮使用詳解與性能分析

數(shù)據(jù)庫 其他數(shù)據(jù)庫
使用數(shù)據(jù)壓縮好處是可以最大程度的減少文件所需的磁盤空間和網(wǎng)絡I/O的開銷,尤其文本文件一般壓縮率可以高達40%左右,對于集群來說帶寬是稀有資源,所有網(wǎng)絡傳輸性能的提升很重要 。但是使用壓縮和解壓縮會增加CPU的開銷。

?HIVE底層是hdfs和mapreduce實現(xiàn)存儲和計算的。所以HIVE可以使用hadoop自帶的InputFormat和Outputformat實現(xiàn)從不同的數(shù)據(jù)源讀取文件和寫出不同格式的文件到文件系統(tǒng)中。同理,HIVE也可以使用hadoop配置的壓縮方法對中間結果或最終數(shù)據(jù)進行壓縮。

1.什么是壓縮及優(yōu)劣?

hive中數(shù)據(jù)做壓縮和解壓縮跟windows下的數(shù)據(jù)壓縮差不錯,同樣有很多中壓縮算法,結果是以不同的后綴名區(qū)別。使用數(shù)據(jù)壓縮好處是可以最大程度的減少文件所需的磁盤空間和網(wǎng)絡I/O的開銷,尤其文本文件一般壓縮率可以高達40%左右,對于集群來說帶寬是稀有資源,所有網(wǎng)絡傳輸性能的提升很重要 。但是使用壓縮和解壓縮會增加CPU的開銷。

所以具體使不使用數(shù)據(jù)壓縮,具體取決于job類型:對那些I/O密集型的作業(yè)使用數(shù)據(jù)壓縮,cpu密集型,使用壓縮反而會降低性能。不過對于作業(yè)的類型的判斷,只能通過實際測量對比執(zhí)行結果去分析。

2.HIVE中常見的壓縮算法

注意,注意,注意,hive中的壓縮算法主要取決于hadoop版本。不同的版本會系統(tǒng)不同的壓縮編碼和解碼器。比如我們公司目前使用的hadoop2.9版本已經(jīng)支持了很多種壓縮方式,版本越高支持的壓縮方式越多。可以在hadoop下的core-site.xm文件中配置壓縮方式,hive使用的也是這個配置文件。如下是我集群中配置的的壓縮方式,實際開發(fā)中可以根據(jù)自己需求配置壓縮方式。當然如果不配置的話,默認則不會使用壓縮。比如我們公司就沒有配置使用snappy壓縮方法。

<property>  
<name>io.compression.codecs</name>
<value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.BZip2Codec</value>
</property>

可以通過如下命令查看hive中已經(jīng)配置好的壓縮算法。使用set命令可以查看所有hive配置文件中的屬性值以及hive安裝環(huán)境的hadoop文件的屬性值。hive中默認壓縮是關閉的,可以通過set hive.exec.compress.output來查看

hive (fdm_sor)> set io.compression.codecs;
io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec,
org.apache.hadoop.io.compress.DefaultCodec,
com.hadoop.compression.lzo.LzoCodec,
com.hadoop.compression.lzo.LzopCodec,
org.apache.hadoop.io.compress.BZip2Codec

如上查詢的結果是對應的算法在hadoop底層的類,為什么要有不同壓縮算法呢?主要是因為不同的壓縮算法在壓縮率和壓縮時間,壓縮的文件是否可切分等方面都不同,實際開發(fā)中需要根據(jù)實際情況權衡使用。

壓縮格式

對應的類

文件擴展名

是否支持多文件

文件可分割性

DEFLATE
(默認)

org.apache.hadoop.io.compress.DefaultCodec

.deflate

gzip

org.apache.hadoop.io.compress.GzipCodec

.gz

bzip2

org.apache.hadoop.io.compress.BZip2Codec

.bz2

LZO

com.hadoop.compression.lzo.LzopCodec

.lzo_deflate

Lzop

com.hadoop.compression.lzo.LzopCodec;

.lzo

三.HIVE中壓縮算法性能分析

這里測試的表中文件是516.4MB,hadoop環(huán)境的塊設置大小是256Mb,正好這樣數(shù)據(jù)存儲是分塊存儲,計算有IO的開銷。可以測算不同壓縮算法下數(shù)據(jù)傳輸計算的時間,以及壓縮率等因子。

[robot~]hadoop fs -du h  /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201901
516.4 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201901/201901.txt
這是直接從linux本地load的文件到hdfs上,文件實際數(shù)據(jù)大小是516.4Mb

1.hive中不使用壓縮,進行計算與存儲

--1.無壓縮算法下進行數(shù)據(jù)存儲計算。
set hive.exec.compress.output=false; --默認就是false的
insert overwrite table t_fin_demo partition(staits_date ='201900')
select
name,
id_type,
idcard,
org,
loan_no,
busi_type,
busi_category,
open_date,
dure_date,
loan_amount,
happen_time,
amout,
due_amt,
stat
from t_fin_demo where staits_date ='201901';

2.使用du -h命令查看hdfs上文件存儲情況
[finance@master2-dev software]$ hadoop fs -du -h /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201900

271.0 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201900/000000_0
271.0 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201900/000001_0
4.7 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201900/000002_0
3.程序運行時間
Total MapReduce CPU Time Spent: 54 seconds 200 msec
Time taken: 36.445 seconds

總結:從上面數(shù)據(jù)看出,無壓縮模式下,數(shù)據(jù)存儲的格式就是文本格式,無后綴名,可以直接從-cat查看。文件存儲大小是原本文件的大小271+271+4.7=546.7Mb,運行時間是36.445。

2.使用hive默認的壓縮方式,hive存儲的文件后綴是.deflate

1.使用deflate進行壓縮
set hive.exec.compress.output=true;
--true是開啟壓縮,默認是關閉的,如果開啟后不指定壓縮方式,默認使用defalte。
set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.DefaultCodec;
insert overwrite table t_fin_demo partition(staits_date ='201904')
select
name,
id_type,
idcard,
org,
loan_no,
busi_type,
busi_category,
open_date,
dure_date,
loan_amount,
happen_time,
amout,
due_amt,
stat
from t_fin_demo where staits_date ='201901';

2.查看數(shù)據(jù)存儲和計算情況
[finance@master2-dev hadoop]$ hadoop fs -du -h /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201903
75.9 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201903/000000_0.deflate
75.9 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201903/000001_0.deflate
1.3 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201903/000002_0.deflate

3.程序耗時時間:
Time taken: 54.659 seconds

總結:上面數(shù)據(jù)看,使用默認的的deflate壓縮算法,數(shù)據(jù)存儲文件后綴名為.deflate.文件存儲的大小是:75.9+75.9+1.3=153.1。程序耗時是54.659s.可以看出deflate壓縮的壓縮率很高,但是程序耗時相比不壓縮有所上升。

3.使用gzip進行壓縮,hive中文件后綴是.gz

1.使用Gzip進行壓縮存儲
set hive.exec.compress.output=true;
set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.GzipCodec;
insert overwrite table t_fin_demo partition(staits_date ='201904')
select
name,
id_type,
idcard,
org,
loan_no,
busi_type,
busi_category,
open_date,
dure_date,
loan_amount,
happen_time,
amout,
due_amt,
stat
from t_fin_demo where staits_date ='201901';

2.使用du -h命令查看hdfs上文件存儲情況
[finance@master2-dev hadoop]$ hadoop fs -du -h /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201904
75.9 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201904/000000_0.gz
75.9 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201904/000001_0.gz
1.3 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201904/000002_0.gz

3.程序運行時間
Total MapReduce CPU Time Spent: 1 minutes 33 seconds 430 msec
OK
Time taken: 62.436 seconds

總結:上面數(shù)據(jù)看,使用默認的的gzip壓縮算法,數(shù)據(jù)存儲文件后綴名為.gz文件存儲的大小是:75.9+75.9+1.3=153.1。程序耗時是62.436.如果下載到windows本地解壓后可讀

4.使用lzo壓縮算法進行壓縮,文件后綴是.lzo_deflate

1.使用lzo進行壓縮存儲
set hive.exec.compress.output=true;
set mapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.lzo.LzoCodec;
insert overwrite table t_fin_demo partition(staits_date ='201905')
select
name,
id_type,
idcard,
org,
loan_no,
busi_type,
busi_category,
open_date,
dure_date,
loan_amount,
happen_time,
amout,
due_amt,
stat
from t_fin_demo where staits_date ='201901';

2.使用du -h命令查看hdfs上文件存儲情況
[finance@master2-dev hadoop]$ hadoop fs -du -h /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201905
121.9 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201905/000000_0.lzo_deflate
121.9 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201905/000001_0.lzo_deflate
2.1 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201905/000002_0.lzo_deflate

3.程序運行時間
Total MapReduce CPU Time Spent: 58 seconds 700 msec
OK
Time taken: 42.45 seconds

總結:上面數(shù)據(jù)看,使用默認的的lzo壓縮算法,數(shù)據(jù)存儲文件后綴名為.lzo_deflate.文件存儲的大小是:121.9+121.9+2.1=245.9。程序耗時是42.45s。

5.使用Lzop壓縮方式,hive存儲的文件后綴是.lzo

1.使用lzop進行壓縮存儲
set hive.exec.compress.output=true;
set mapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.lzo.LzopCodec;
insert overwrite table t_fin_demo partition(staits_date ='201906')
select
name,
id_type,
idcard,
org,
loan_no,
busi_type,
busi_category,
open_date,
dure_date,
loan_amount,
happen_time,
amout,
due_amt,
stat
from t_fin_demo where staits_date ='201901';

2.使用du -h命令查看hdfs上文件存儲情況
[finance@master2-dev hadoop]$ hadoop fs -du -h /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201906
121.9 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201906/000000_0.lzo
121.9 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201906/000001_0.lzo
2.1 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201906/000002_0.lzo

3.程序運行時間
Total MapReduce CPU Time Spent: 47 seconds 280 msec
OK
Time taken: 34.439 seconds

總結:上面數(shù)據(jù)看,使用默認的的Lzop壓縮算法,數(shù)據(jù)存儲文件后綴名為.lzo。文件存儲的大小是:121.9+121.9+2.1=245.9。程序耗時是34.439s。

6.使用BZip2壓縮方式,hive存儲的文件后綴是.bz2

1.使用Bzip2進行壓縮存儲
set hive.exec.compress.output=true;
set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.BZip2Codec;
insert overwrite table t_fin_demo partition(staits_date ='201907')
select
name,
id_type,
idcard,
org,
loan_no,
busi_type,
busi_category,
open_date,
dure_date,
loan_amount,
happen_time,
amout,
due_amt,
stat
from t_fin_demo where staits_date ='201901';

2.使用du -h命令查看hdfs上文件存儲情況
[finance@master2-dev hadoop]$ hadoop fs -du -h /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201907
52.5 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201907/000000_0.bz2
52.5 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201907/000001_0.bz2
935.2 K /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201907/000002_0.bz2

3.程序運行時間
Total MapReduce CPU Time Spent: 2 minutes 47 seconds 530 msec
OK
Time taken: 96.42 seconds

總結:上面數(shù)據(jù)看,使用默認的的Bzip2壓縮算法,數(shù)據(jù)存儲文件后綴名為.bz2。文件存儲的大小是:52.5+52.5+0.934=106Mb。程序耗時是96.42s

各種壓縮算法綜合分析

壓縮方式

原文件大小

壓縮后文件

運行時間

備注

不使用壓縮

516.4Mb

546.70Mb

36.445s


defalte(默認壓縮)

516.4Mb

153.16Mb

54.659s

壓縮率高

lzo壓縮

516.4Mb

245.90Mb

42.45s

LZO壓縮和解壓縮很快,但是壓縮的文件較大

Lzop壓縮

516.4Mb

249.90Mb

34.439s

LZOP壓縮和解壓縮很快,但是壓縮的文件較大

gzip壓縮

516.4Mb

153.16Mb

62.436s

GZip 和 BZip2壓縮可以保證最小的壓縮文件,但是過于消耗時間,非常不適合CPU型運算。

Bzip2壓縮

516.4Mb

106.00Mb

96.42s

GZip 和 BZip2壓縮可以保證最小的壓縮文件,但是過于消耗時間,不適合CPU型運算。

綜合上表可以看出,每種壓縮算法都有自己的優(yōu)缺點。具體使用哪種壓縮取決于具體存儲的數(shù)據(jù)格式與計算模式有關。具體壓縮使用與原理參考后續(xù)博客。

1.就壓縮比來說:bzip2>gzip>deflate>lzo,故bzip2最節(jié)省存儲空間,但是耗時高哇。

2.解壓速度和耗時:lzo>deflate>gzip>bzip2

本文轉載自微信公眾號「滌生大數(shù)據(jù)」,作者「滌生大數(shù)據(jù)」,可以通過以下二維碼關注。

轉載本文請聯(lián)系「滌生大數(shù)據(jù)」公眾號。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2011-08-15 22:10:08

Oracle性能分析工

2022-06-30 10:38:53

Lepton無損壓縮圖片圖片質量

2015-08-18 11:44:02

PHP性能分析宏觀分析

2021-07-14 14:27:01

AndroidAOPhugo

2015-09-14 10:41:51

PHP性能分析微觀分析

2011-06-20 11:14:09

Qt QxtGlobalS 熱鍵

2012-04-23 10:30:38

Hadoop

2017-06-16 09:58:34

Hive格式壓縮算法

2017-03-13 09:50:00

HadoopHive

2024-12-30 10:03:11

2009-09-23 12:48:54

Hibernate I

2023-10-20 13:12:10

Btrfs壓縮

2009-07-06 18:29:55

2012-03-27 14:04:54

JavaEnum

2022-07-15 08:52:03

Linux優(yōu)化

2017-06-12 18:48:00

Android性能分析工具

2024-11-25 16:29:48

2011-09-09 19:05:28

Widget

2013-03-06 10:24:12

ksar工具系統(tǒng)性能

2011-08-18 11:31:06

MySQL性能分析explain
點贊
收藏

51CTO技術棧公眾號