压缩数据的优点:
节约磁盘空间
加速数据在网络和磁盘上的传输
压缩算法的缺点:
会消耗CPU的资源
先测试一下是否支持openssl压缩算法
bin/hadoop checknative
1
如果出现false就安装一下
yum install openssl-devel
1
hadoop支持的压缩算法
压缩格式 工具 算法 文件扩展名 是否可切分
DEFLATE 无 DEFLATE .deflate 否
Gzip gzip DEFLATE .gz 否
bzip2 bzip2 bzip2 bz2 是
LZO lzop LZO .lzo 否
LZ4 无 LZ4 .lz4 否
Snappy 无 Snappy .snappy 否
各种压缩算法对应使用的java类
压缩格式 对应使用的java类
DEFLATE org.apache.hadoop.io.compress.DeFaultCodec
gzip org.apache.hadoop.io.compress.GZipCodec
bzip2 org.apache.hadoop.io.compress.BZip2Codec
LZO com.hadoop.compression.lzo.LzopCodec
LZ4 org.apache.hadoop.io.compress.Lz4Codec
Snappy org.apache.hadoop.io.compress.SnappyCodec
常见的压缩速率比较
压缩算法 原始文件大小 压缩后的文件大小 压缩速度 解压缩速度
gzip 8.3GB 1.8GB 17.5MB/s 58MB/s
bzip2 8.3GB 1.1GB 2.4MB/s 9.5MB/s
LZO-bset 8.3GB 2GB 4MB/s 60.6MB/s
LZO 8.3GB 2.9GB 49.3MB/S 74.6MB/s
snappy比以上压缩算法都要快
如何开启压缩:
方式一:在代码中进行设置压缩
设置map阶段的压缩
Configuration configuration = new Configuration();
configuration.set(“mapreduce.map.output.compress”,”true”);
configuration.set(“mapreduce.map.output.compress.codec”,”org.apache.hadoop.io.compress.SnappyCodec”);
设置reduce阶段的压缩
configuration.set(“mapreduce.output.fileoutputformat.compress”,”true”);
configuration.set(“mapreduce.output.fileoutputformat.compress.type”,”RECORD”);
configuration.set(“mapreduce.output.fileoutputformat.compress.codec”,”org.apache.hadoop.io.compress.SnappyCodec”);
1
2
3
4
5
6
7
方式二:配置全局的MapReduce压缩
修改mapred-site.xml配置文件,然后重启集群,以便对所有的mapreduce任务进行压缩
map输出数据进行压缩
<property>
<name>mapreduce.map.output.compress</name>
<value>true</value>
</property>
<property>
<name>mapreduce.map.output.compress.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
reduce输出数据进行压缩
<property> <name>mapreduce.output.fileoutputformat.compress</name>
<value>true</value>
</property>
<property> <name>mapreduce.output.fileoutputformat.compress.type</name>
<value>RECORD</value>
</property>
<property> <name>mapreduce.output.fileoutputformat.compress.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value> </property>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
注意:所有节点都要修改mapred-site.xml,修改完成之后记得重启集群
2、使用hadoop的snappy压缩来对数据进行压缩
第一步:代码中添加配置
这里通过修改代码的方式来实现数据的压缩
map阶段输出压缩配置
Configuration configuration = new Configuration();
configuration.set(“mapreduce.map.output.compress”,”true”);
configuration.set(“mapreduce.map.output.compress.codec”,”org.apache.hadoop.io.compress.SnappyCodec”);
reduce阶段输出压缩配置
configuration.set(“mapreduce.output.fileoutputformat.compress”,”true”);
configuration.set(“mapreduce.output.fileoutputformat.compress.type”,”RECORD”);
configuration.set(“mapreduce.output.fileoutputformat.compress.codec”,”org.apache.hadoop.io.compress.SnappyCodec”);
1
2
3
4
5
6
7
8
9
第二步:重新打包测试mr程序
会发现MR运行之后的输出文件都变成了以.snappy的压缩文件
————————————————
版权声明:本文为CSDN博主「王傲旗的大数据之路」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
snappy是google的一个开源的压缩库,在合理的压缩率的前提下提供了提供了一个很高的压缩/解压的速度,利用单颗Intel Corei7处理器内核处理达到每秒处理250MB~500MB的数据流。snappy压缩在Hadoop中不是自带的,本文介绍在hadoop2.0中安装和配置snappy压缩,使hadoop2.0支持snappy压缩。
相关阅读:
Ubuntu 12.10 +Hadoop 1.2.1版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm
Ubuntu上搭建Hadoop环境(单机模式+伪分布模式) http://www.linuxidc.com/Linux/2013-01/77681.htm
Ubuntu下Hadoop环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm
单机版搭建Hadoop环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm
Hadoop集群上使用Lzo压缩 http://www.linuxidc.com/Linux/2012-05/60554.htm
hadoop-snappy-master.zip
1 安装snappy库
可以从https://code.google.com/p/snappy/下载源码,通过编译源码安装
tar -zxvf snappy-1.1.1.tar.gz
cd snappy-1.1.1
./configure
make
sudo make install
也可以直接用yum来安装
sudo yum install snappy snappy-devel
2 安装hadoop-snappy包
从https://github.com/electrum/hadoop-snappy下载hadoop-snappy包hadoop-snappy-master.zip
解压
unzip hadoop-snappy-master.zip
解压后是一个hadoop-snappy-master文件夹
编译
cd hadoop-snappy-master/
mvn package -Dsnappy.prefix=/usr/local
注意-Dsnappy.prefix是设置你的snappy安装的目录,默认是/usr/local
编译后把本地库文件和jar包(编译后可能已经打在一个压缩包里,需要先解压)拷贝到相应的目录
tar -zxvf hadoop-snappy-0.0.1-SNAPSHOT.tar.gz
cp-r hadoop-snappy-0.0.1-SNAPSHOT/lib/* $HADOOP_HOME/lib
Snappy 0.0.1-SNAPSHOT/目录包含本地库和hadoop-snappy-0.0.1-SNAPSHOT.jar包,都需要拷贝到相应的目录。
3 修改hadoop配置文件core-site.xml
<property>
    <name>io.compression.codecs</name>
        <value>
                org.apache.hadoop.io.compress.GzipCodec,
                org.apache.hadoop.io.compress.DefaultCodec,
                org.apache.hadoop.io.compress.BZip2Codec,
                org.apache.hadoop.io.compress.SnappyCodec
        </value>
</property>
4 重启hadoop集群
这样,我们hadoop服务器上的hadoop snappy就安装成功了。
5 实战tips
在hadoop2.0中,把hadoop-snappy-0.0.1-SNAPSHOT.jar包拷贝到$HADOOP_HOME/share/hadoop/mapreduce/lib/或者$HADOOP_HOME/share/hadoop/mapreduce/目录下,不需要重启hadoop集群。
hadoop服务器的每台机器都需要安装和配置。
hadoop客户机snappy的安装和配置的方法与hadoop服务器一样。
更多Hadoop相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13
本文永久更新链接地址:http://www.linuxidc.com/Linux/2014-05/101091.htm

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注