溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Hive的存儲(chǔ)格式對(duì)比

發(fā)布時(shí)間:2020-09-03 18:20:55 來(lái)源:網(wǎng)絡(luò) 閱讀:2889 作者:bigdata_lzw 欄目:大數(shù)據(jù)

在生產(chǎn)中可以通過(guò)Hive表的文件格式及查詢速度的對(duì)比來(lái)確定使用哪種文件格式,以節(jié)省空間和提高查詢速度;

官方參考文檔:https://cwiki.apache.org/confluence/display/HIVE


結(jié)論:

????壓縮效果:

????????最好的是:bzip2;bzip2壓縮比很高,但是占用時(shí)間較久

????? ? 其次:orc和parquet的壓縮幾乎一致;生產(chǎn)建議選擇orc或者parquet;?

????查詢性能:由于數(shù)據(jù)量太小,得出的結(jié)果不準(zhǔn)確;大佬的生產(chǎn)經(jīng)驗(yàn)是parquet的查詢性能要優(yōu)于orc;

Hive支持的存儲(chǔ)格式有:

? ? Text File

????SequenceFile

????RCFile

????Avro Files

????ORC Files

????Parquet

注:Hive默認(rèn)的格式為Text File,可以通過(guò)set hive.default.fileformat查看

>?set?hive.default.fileformat;
hive.default.fileformat=TextFile

以下將對(duì)每種文件格式進(jìn)行對(duì)比:

創(chuàng)建TextFile表

#原始數(shù)據(jù)格式為TextFile,大小為65M
[hadoop@hadoop001?~]$?hadoop?fs?-du?-s?-h?/input/*
64.9?M??194.7?M??/input/part-r-00000

#創(chuàng)建表并加載TextFile數(shù)據(jù)
CREATE?EXTERNAL?TABLE?textfile?(
cdn?string,?
region?string,?
level?string,?
time?string,?
ip?string,?
domain?string,?
url?string,?
traffic?bigint)
ROW?FORMAT?DELIMITED?FIELDS?TERMINATED?BY?'\t';?

load?data?local?inpath?'/home/hadoop/part-r-00000'?overwrite?into?table?textfile;

可以看到此數(shù)據(jù)大小的64.9M

Hive的存儲(chǔ)格式對(duì)比

從上面的表中創(chuàng)建一個(gè)bzip2壓縮的表:

hive支持在創(chuàng)建表的時(shí)候?qū)?shù)據(jù)進(jìn)行壓縮,配置如下:

設(shè)置開(kāi)啟壓縮:set?hive.exec.compress.output=true;

查看壓縮的格式:set mapreduce.output.fileoutputformat.compress.codec;

配置壓縮的格式:set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.BZip2Codec

#創(chuàng)建一個(gè)bzip2壓縮的表
create?table?textfile_bzip2?as?select?*?from?textfile;


可以看到啟動(dòng)壓縮以后,大小只有13.84M,格式為bz2

Hive的存儲(chǔ)格式對(duì)比

創(chuàng)建SequenceFile表

#創(chuàng)建SequenceFile表
CREATE?EXTERNAL?TABLE?seqfile?(
cdn?string,?
region?string,?
level?string,?
time?string,?
ip?string,?
domain?string,?
url?string,?
traffic?bigint)
ROW?FORMAT?DELIMITED?FIELDS?TERMINATED?BY?'\t'
stored?as?sequencefile;

#加載數(shù)據(jù)
insert?into?table?seqfile?select?*?from?textfile;
注:默認(rèn)用load加載數(shù)據(jù)時(shí),由于源文件是textfile,而表格式為sequencefile,所以無(wú)法直接加載,要借用一個(gè)臨時(shí)表使用insert?into進(jìn)行加載

可以看到sequencefile格式的表數(shù)據(jù)比原始文件還要,這是因?yàn)閟equencefile表在創(chuàng)建時(shí),增加了很多額外信息,在生產(chǎn)中不使用此種類型的文件格式;

Hive的存儲(chǔ)格式對(duì)比

創(chuàng)建RCFile表

#創(chuàng)建RCFile表
CREATE?EXTERNAL?TABLE?rcfile?(
cdn?string,?
region?string,?
level?string,?
time?string,?
ip?string,?
domain?string,?
url?string,?
traffic?bigint)
ROW?FORMAT?DELIMITED?FIELDS?TERMINATED?BY?'\t'
stored?as?rcfile;

#加載數(shù)據(jù)
insert?into?table?rcfile?select?*?from?textfile;

rcfile的作用僅僅是將存儲(chǔ)空間節(jié)省了10%左右,在生產(chǎn)中不使用此種文件格式;


創(chuàng)建ORC Files:orc是基于rc,是優(yōu)化過(guò)后的列式存儲(chǔ)

關(guān)于orc的官方介紹:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC

#創(chuàng)建orc格式的表;默認(rèn)orcfile是采用zlib格式進(jìn)行壓縮
CREATE?EXTERNAL?TABLE?orcfile?(
cdn?string,?
region?string,?
level?string,?
time?string,?
ip?string,?
domain?string,?
url?string,?
traffic?bigint)
ROW?FORMAT?DELIMITED?FIELDS?TERMINATED?BY?'\t'
stored?as?orcfile;

#加載數(shù)據(jù)
insert?into?table?orcfile?select?*?from?textfile;

#創(chuàng)建orc格式的表,指定不采用zlib壓縮;通過(guò)"orc.compress"="NONE"指定
create?table?orcfile_none
stored?as?orc?tblproperties?("orc.compress"="NONE")?
as?select?*?from?textfile;

orcfile采用zlib壓縮:

Hive的存儲(chǔ)格式對(duì)比


orcfile不采用zlib壓縮:

Hive的存儲(chǔ)格式對(duì)比

總結(jié):通過(guò)對(duì)比,采用zlib壓縮時(shí),節(jié)省的空間更多一點(diǎn)


創(chuàng)建Parquet格式的表

#創(chuàng)建Parquet格式不使用壓縮
create?table?parquetfile
stored?as?parquet
as?select?*?from?textfile;


#創(chuàng)建Parquet格式使用gzip壓縮
set?parquet.compression=gzip;

create?table?parquetfile_gzip
stored?as?parquet
as?select?*?from?textfile;

注:通過(guò)對(duì)比,Parquet格式使用gzip壓縮時(shí),可以節(jié)省大量的空間

parquet不經(jīng)過(guò)gzip壓縮:可以看到幾乎沒(méi)有壓縮多少空間

Hive的存儲(chǔ)格式對(duì)比

parquet經(jīng)過(guò)gzip壓縮:可以看到壓縮后的數(shù)據(jù)很代;

Hive的存儲(chǔ)格式對(duì)比

????

查詢性能對(duì)比:

查詢語(yǔ)句:select count(*) from textfile|rcfile|orcfile|parquetfile where ip='210.35.230.31';

查詢條數(shù):

????textfile:查詢了全表的所有數(shù)據(jù),查詢68085397條數(shù)據(jù);

????rcfile:查詢1973371條數(shù)據(jù);

????orcfile:查詢2883851條數(shù)據(jù);

????parquetfile:查詢了8622602條數(shù)據(jù);

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI