关于几种压缩算法以及hadoop和hbase中的压缩配置说明
Hadoop中常用的壓縮算法有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
| GZIP | 13.4% | 21 MB/s | 118 MB/s |
| LZO | 20.5% | 135 MB/s | 410 MB/s |
| Snappy | 22.2% | 172 MB/s | 409 MB/s |
?
對(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
<property>
<name>mapred.compress.map.output</name>
<value>true</value>
</property>
<property>
<name>mapred.map.output.compression.codec</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
?方法二
hive中hive-site.xml
<property>
? <name>hive.exec.compress.intermediate</name>
? <value>true</value>
? <description>Should the outputs of the maps be compressed before being
?????????????? sent across the network. Uses SequenceFile compression.
? </description>
</property>
<property>
? <name>hive.intermediate.compression.codec</name>
? <value>org.apache.hadoop.io.compress.LzoCodec</value>
? <description>If the map outputs are compressed, how should they be
?????????????? compressed?
? </description>
</property>
方法三
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中配置:
<property>
? <name>hive.exec.compress.output</name>
? <value>true</value>
? <description>Should the job outputs be compressed?
? </description>
</property>
<property>
? <name>mapred.output.compression.codec</name>
? <value>org.apache.hadoop.io.compress.LzoCodec</value>
? <description>If the job outputs are compressed, how should they be compressed?
? </description>
</property>
?
或者在hadoop-site.xml中添加:
<property>
? <name>io.compression.codecs</name>
? <value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.LzoCodec</value>
? <description>A list of the compression codec classes that can be used
?????????????? for compression/decompression.</description>
</property>
<property>
? <name>mapred.output.compress</name>
? <value>true</value>
? <description>Should the job outputs be compressed?
? </description>
</property>
<property>
? <name>mapred.output.compression.codec</name>
? <value>org.apache.hadoop.io.compress.LzoCodec</value>
? <description>If the job outputs are compressed, how should they be compressed?
? </description>
</property>
?
二、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壓縮
??????
?????? <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
??????? </value>
?????? </property>
????? <property>
??????? <name>io.compression.codec.lzo.class</name>
??????? <value>com.hadoop.compression.lzo.LzoCodec</value>
????? </property>
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壓縮
??????
?????? <property>
???????? <name>io.compression.codecs</name>
???????? <value>org.apache.hadoop.io.compress.SnappyCodec
??????? </value>
?????? </property>
hbase(main):001:0> create 'testtable', { NAME => 'colfam1',
COMPRESSION => 'synappy' }
總結(jié)
以上是生活随笔為你收集整理的关于几种压缩算法以及hadoop和hbase中的压缩配置说明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XML文档类型定义DTD
- 下一篇: hive的Specified key w