adoop中常用的壓縮算法有bzip2、gzip酿愧、lzo沥潭、snappy,其中l(wèi)zo嬉挡、snappy需要操作系統(tǒng)安裝native庫(kù)才可以支持钝鸽。
下面這張表,是比較官方一點(diǎn)的統(tǒng)計(jì)庞钢,不同的場(chǎng)合用不同的壓縮算法寞埠。bzip2和GZIP是比較消耗CPU的,壓縮比最高焊夸,GZIP不能被分塊并行的處理仁连;Snappy和LZO差不多,稍微勝出一點(diǎn)阱穗,cpu消耗的比GZIP少饭冬。
通常情況下,想在CPU和IO之間取得平衡的話揪阶,用Snappy和lzo比較常見一些昌抠。
Comparison between compression algorithms
其中:
1)GZIP的壓縮率最高,但是其實(shí)CPU密集型的鲁僚,對(duì)CPU的消耗比其他算法要多炊苫,壓縮和解壓速度也慢;
2)LZO的壓縮率居中冰沙,比GZIP要低一些侨艾,但是壓縮和解壓速度明顯要比GZIP快很多,其中解壓速度快的更多拓挥;
3)Zippy/Snappy的壓縮率最低唠梨,而壓縮和解壓速度要稍微比LZO要快一些。
對(duì)于數(shù)據(jù)格式為TextFile侥啤,Sequence当叭,以及其他用戶自定義的文件格式的文件茬故,都可以采用以上的壓縮算法進(jìn)行壓縮;
TextFile在壓縮以后蚁鳖,不能split磺芭,壓縮出來的數(shù)據(jù)當(dāng)做job的輸入是一個(gè)文件作為一個(gè)map。SequenceFile本身是分塊的醉箕,加上lzo的壓縮格式徘跪,文件可以實(shí)現(xiàn)lzo方式的split操作,可以按照record琅攘、block進(jìn)行壓縮,一般采用block效率更高一些松邪。
一坞琴、hadoop(hive)對(duì)mapreduce壓縮參數(shù)設(shè)置
1、mapreduce的中間結(jié)果對(duì)壓縮的支持
方法一:
hadoop 中 mapred-site.xml
mapred.compress.map.output
true
mapred.map.output.compression.codec
com.hadoop.compression.lzo.LzoCodec
方法二
hive中hive-site.xml
hive.exec.compress.intermediate
true
Should the outputs of the maps be compressed before being
sent across the network. Uses SequenceFile compression.
hive.intermediate.compression.codec
org.apache.hadoop.io.compress.LzoCodec
If the map outputs are compressed, how should they be
compressed?
方法三
hive中shell
set hive.exec.compress.intermediate=true;
set hive.intermediate.compression.codec="org.apache.hadoop.io.compress.LzoCodec";
2逗抑、mapreduce的輸出結(jié)果對(duì)壓縮的支持
hive-site.xml中配置:
hive.exec.compress.output
true
Should the job outputs be compressed?
mapred.output.compression.codec
org.apache.hadoop.io.compress.LzoCodec
If the job outputs are compressed, how should they be compressed?
或者在hadoop-site.xml中添加:
io.compression.codecs
org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.LzoCodec
A list of the compression codec classes that can be used
for compression/decompression.
mapred.output.compress
true
Should the job outputs be compressed?
mapred.output.compression.codec
org.apache.hadoop.io.compress.LzoCodec
If the job outputs are compressed, how should they be compressed?
二剧辐、HBASE對(duì)這三種壓縮格式的支持
HBase中可以對(duì)HFile進(jìn)行g(shù)zip、lzo邮府、snappy方式的壓縮存儲(chǔ)荧关。
1、對(duì)于gzip壓縮的支持
hbase(main):001:0> create 'testtable', { NAME => 'colfam1',
COMPRESSION => 'GZ' }
或者alter 'testtable'褂傀,不過要先disable table忍啤,完成壓縮后,再enable table
2仙辟、對(duì)于lzo的支持同波,需要系統(tǒng)安裝lzo動(dòng)態(tài)庫(kù),以及hadoop lzo相關(guān)的native庫(kù)叠国,后把native庫(kù)jar文件copy到hadoop/lib/native 及 hbase/lib/native中
同時(shí)在core-site.xml中未檩,配置lzo壓縮
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
io.compression.codec.lzo.class
com.hadoop.compression.lzo.LzoCodec
org.apache.hadoop.io.compress.DefaultCodec是hadoop默認(rèn)的zlib壓縮
hbase(main):001:0> create 'testtable', { NAME => 'colfam1',
COMPRESSION => 'lzo' }
3、 對(duì)于synappy的支持粟焊,需要安裝snappy冤狡,并且 將 hadoop-snappy-0.0.1-SNAPSHOT.tar.gz 的native中的動(dòng)態(tài)靜態(tài)鏈接庫(kù)文件拷到hadoop以及hbase lib的native下面,將hadoop-snappy-0.0.1-SNAPSHOT.jar考到hadoop 以及hbase 的lib下
在core-site.xml中项棠,配置lzo壓縮
io.compression.codecs
org.apache.hadoop.io.compress.SnappyCodec
hbase(main):001:0> create 'testtable', { NAME => 'colfam1',
COMPRESSION => 'synappy' }
小編這里整理了更多相關(guān)的 學(xué)習(xí)資料和 學(xué)習(xí)視頻悲雳,可免費(fèi)領(lǐng)取。
加 VX:17778119562? ? ? ? 通過驗(yàn)證備注:111(備注必填香追,方便通過)