`

hadoop 压缩 gzip biz2 lzo snappy

阅读更多

    集成snappy和LZO压缩格式的一般步骤如下:

 

  • 1)编译hadoop-xxx-master.zip得到一个hadoop-xxx-0.0.1-SNAPSHOT.jar和native/Linux-amd64-64/*.so等文件;
  • 2)拷贝上面的jar和so文件到hadoop或者hbase的目录
    优雅的做法是:
  • 1)编译hadoop-xxx-master.zip得到一个hadoop-xxx-0.0.1-SNAPSHOT.jar和native/Linux-amd64-64/*.so等文件;
  • 2)拷贝上面的jar到hadoop或者hbase的目录
  • 3)配置环境变量LD_LIBRARY_PATH,把所有的相关so文件目录都放进去,比如export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native:/usr/local/lib:/usr/local/lzo-2.10/lib

1.Apache hadoop默认安装包不支持Snappy和LZO原因

    Apache hadoop官网提供的hadoop版本本身就支持Bzip2、Gzip、DEFLATE3种压缩格式,不支持Snappy和LZO格式,原因是Snappy和LZO的代码库拥有GPL开源协议许可,而不是Apache开源协议许可,关于Snappy和LZO需要hadoop运维或者hadoop提供商自己集成。关于开源代码协议GPL、BSD、MIT、Mozilla、Apache和LGPL的区别详见下图:

2.hadoop压缩优点

  • 减少了存储文件所需的空间
  • 加速了网络、磁盘或磁盘的数据传输

3.选择hadoop文件压缩格式考虑三个因素

  • 文件压缩比例
  • 文件解压缩效率
  • 该压缩格式的文件是否可被切分,不能切分直接影响mapreduce的map的个数,从而导致mapreduce效率低下

4.压缩格式优缺点以及应用场景

    默认Apache hadoop官网下载的安装文件默认就支持Bzip2、Gzip、DEFLATE3种压缩格式,但是不支持Snappy和LZO压缩格式。因为Snappy和LZO代码库拥有GPL许可,所以没有包含在Apache的发行版本中。

 4.1 DEFLATE压缩

    DEFLATE是一个标准压缩算法,该算法的标准实现是zlib。没有可用于生成EFLATE文件的常用linux命令工具,因为通常都不会用这个格式,而用gzip格式。gzip文件格式只是在DEFLATE格式上增加了文件头和一个文件尾。其文件以.deflate结尾。

 4.2 gzip压缩

  优点:

  • 压缩率比较高,而且压缩/解压速度也比较快;
  • hadoop本身支持,在应用中处理gzip格式的文件就和直接处理文本一样
  • hadoop native库
  • 大部分linux系统都自带gzip命令,使用方便
  缺点:
  • 不支持split
  应用场景:
    当每个文件压缩之后在130M以内的(1个块大小内),都可以考虑用gzip压缩格式。譬如说一天或者一个小时的日志压缩成一个gzip文件,运行mapreduce程序的时候通过多个gzip文件达到并发。hive程序,streaming程序,和java写的mapreduce程序完全和文本处理一样,压缩之后原来的程序不需要做任何修改。

  4.3 bzip2压缩

  优点:
  • 支持split
  • 具有很高的压缩率,比gzip压缩率都高;
  • hadoop本身支持,但不支持native
  • 在linux系统下自带bzip2命令,使用方便
  缺点:
  • 压缩/解压速度慢;
  • 不支持native
  应用场景:
    适合对速度要求不高,但需要较高的压缩率的时候,可以作为mapreduce作业的输出格式;或者输出之后的数据比较大,处理之后的数据需要压缩存档减少磁盘空间并且以后数据用得比较少的情况;或者对单个很大的文本文件想压缩减少存储空间,同时又需要支持split,而且兼容之前的应用程序(即应用程序不需要修改)的情况。

  4.4 lzo压缩

  优点:
  • 压缩/解压速度也比较快,合理的压缩率;
  • 支持split,是hadoop中最流行的压缩格式;
  • 支持hadoop native库
  • 可以在linux系统下安装lzop命令,使用方便
  缺点:
  • 压缩率比gzip要低一些;
  • hadoop本身不支持,需要安装
  • 在应用中对lzo格式的文件需要做一些特殊处理(为了支持split需要建索引,还需要指定inputformat为lzo格式
  应用场景:
    一个很大的文本文件,压缩之后还大于200M以上的可以考虑,而且单个文件越大,lzo优点越越明显

  4.5 LZ4压缩

  优点:
  • 高速压缩解压库, 压缩率为 zlib 2/3, 但速度很高
  缺点:
  • linux系统下没有对应的命令
  • 不支持split
  • 不支持流式操作

  4.6 snappy压缩

  优点:
  • 高速压缩速度和合理的压缩率;
  • 支持hadoop native库
  缺点:
  • 不支持split;
  • 压缩率比gzip要低;
  • hadoop本身不支持,需要安装
  • linux系统下没有对应的命令
  应用场景:
    当mapreduce作业的map输出的数据比较大的时候,作为map到reduce的中间数据的压缩格式;或者作为一个mapreduce作业的输出和另外一个mapreduce作业的输入.

5.集成LZO到Apache hadoop中(适用于Hadoop1.x、Hadoop2.x和Hadoop3.x)

    关于LZO如何集成到Apache hadoop可以详见GitHub上hadoop-lzo的源代码https://github.com/twitter/hadoop-lzo说明,这里下面的步骤也是我参照源代码经过实践得来,关于更详细的内容(必须的依赖库,如何安装,如何处理安装中LZO找不到,如何去使用LZO)请参见源代码说明。
    如果你在hadoop权威指南里看到LZO的源代码库为https://github.com/kevinweil/hadoop-lzo,不足为奇,这个源代码库依然在GitHub中,它采用的是ant进行编译,不过已经6年未更新了,新的hadoop-lzo源代码已经转移到https://github.com/twitter/hadoop-lzo,如果你非得使用https://github.com/kevinweil/hadoop-lzo,请参见本文的第7节进行集成。

  5.1 hadoop-lzo在github上的代码库地址(https://github.com/twitter/hadoop-lzo)  

  5.2 源代码编译前的准备工作

    (1) linux库LZO的安装
    ubuntu中使用apt-get install lzo安装,centos中使用yum -y install lzo安装,这里我个人习惯下载lzo源代码然后编译安装。
    注意:这里的linux库LZO需要在hadoop集群的每个节点都需要安装。
#linux安装lzo
#下载并解压linux库lzo源代码
cd /root
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.10.tar.gz
tar -zxvf lzo-2.10.tar.gz
#编译安装linuxlzo源代码
cd /root/lzo-2.10
#这里我指定安装linux的lzo库到linux机器的/usr/local/lzo-2.10目录
./configure --enable-shared --prefix /usr/local/lzo-2.10
make
make install
    (2)JDK安装
#安装jdk-7u65-linux-x64.gz
#下载jdk-7u65-linux-x64.gz放置于/opt/java/jdk-7u65-linux-x64.gz并解压
cd /opt/java/
tar -zxvf jdk-7u65-linux-x64.gz
#配置linux系统环境变量
vi /etc/profile
#在文件末尾追加如下内容
export JAVA_HOME=/opt/java/jdk1.7.0_65 
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 
export PATH=$PATH:$JAVA_HOME/bin 
#使配置生效
source /etc/profile
#检查JDK环境是否配置成功
java -version
    (3)MAVEN安装
#1.下载apache-maven-3.3.3.tar.gz放置于/opt/下并解压
cd /opt
tar zxvf apache-maven-3.3.3.tar.gz
#2.配置环境变量
vi /etc/profile
#添加如下内容
MAVEN_HOME=/opt/apache-maven-3.3.3
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin
#3.使配置生效
source /etc/profile
#4.检测maven是否安装成功
mvn -version
#5.配置maven仓库镜像,目前国内maven镜像建议使用阿里云库
vi /home/hadoop/.m2/settings.xml
#内容如下:
<?xml version="1.0" encoding="UTF-8"?>  
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">  
  <!--默认下载依赖放置于/home/hadoop/.m2/repository目录下,这里我指定我想存放于/opt/maven-localRepository-->  
  <localRepository>/opt/maven-localRepository</localRepository>  
  <pluginGroups></pluginGroups>  
  <proxies></proxies>  
  <servers></servers>  
  <mirrors>  
  <!--add by aperise start-->  
    <mirror>  
      <id>alimaven</id>  
      <name>aliyun maven</name>  
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
      <mirrorOf>central</mirrorOf>          
    </mirror>    
  <!--add by aperise end-->  
  </mirrors>  
  <profiles>  
  </profiles>  
</settings>  

  5.3 hadoop-lzo库编译安装

#下载并解压源代码hadoop-lzo-master
cd /home/hadoop
wget https://github.com/twitter/hadoop-lzo/archive/hadoop-lzo-master.zip
unzip hadoop-lzo-master.zip
cd /home/hadoop/hadoop-lzo-master
#注意以下三行一起执行,前两行是指定LZO库文件所在位置,注意和之前安装的linux库LZO所在位置保持一致
C_INCLUDE_PATH=/usr/local/lzo-2.10/include \
LIBRARY_PATH=/usr/local/lzo-2.10/lib \
mvn clean package -DskipTests
    编译完成后会在/home/hadoop/hadoop-lzo-master/target下得到如下文件:
    其中hadoop-lzo-0.4.21-SNAPSHOT.jar和native就是我们需要的jar和库文件,在后面只需要拷贝jar和native下面的库文件到hadoop下即可完成集成,这里在/home/hadoop/hadoop-lzo-master/target/native/Linux-amd64-64/lib的库文件如下:

  5.4 集成hadoop-lzo库到hadoop-2.7.4

    需要拷贝hadoop-lzo-0.4.21-SNAPSHOT.jar到/home/hadoop/hadoop-2.7.4/share/hadoop/common/lib/下面,需要拷贝/home/hadoop/hadoop-lzo-master/target/native/Linux-amd64-64/lib/下的文件到/home/hadoop/hadoop-2.7.4/lib/native/下面
cp -r /home/hadoop/hadoop-lzo-master/target/native/Linux-amd64-64/lib/* /home/hadoop/hadoop-2.7.4/lib/native/
cp -r /home/hadoop/hadoop-lzo-master/target/hadoop-lzo-0.4.21-SNAPSHOT.jar /home/hadoop/hadoop-2.7.4/share/hadoop/common/lib/

6.Hadoop2.x和Hadoop3.x如何集成snappy

    6.1 在Linux上安装snappy库

        在GitHub上Hadoop的源码编译文件里已经明确说明如何集成snappy,详见https://github.com/apache/hadoop/blob/trunk/BUILDING.txt

        集成snappy,首先需要Linux操作系统已经安装snappy库,而安装snappy库的推荐方式为:

 

sudo apt-get install snappy libsnappy-dev
        如果机器是离线环境,可以采用编译安装,方式如下:
#1.去https://github.com/google/snappy/releases下载snappy-1.1.3.tar.gz并解压
cd /root
wget https://github.com/google/snappy/releases/download/1.1.3/snappy-1.1.3.tar.gz
tar -zxvf snappy-1.1.3.tar.gz

#2.在linux上编译安装
cd /root/snappy-1.1.3
./configure
make
make install

#3.默认安装在/usr/local/lib,在其下会有snappy相关.so结尾的库文件

 

 

    6.2  编译Hadoop2.x之后源码里的Hadoop-common模块

        Hadoop源码里的hadoop-common模块内置了snappy、gzip、bzip2、lz4的编解码,唯一没有的是关于lzo的编解码库:

snappy https://github.com/apache/hadoop/blob/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/SnappyCodec.java  自带,需要Linux已经安装snappy库
默认编解码 https://github.com/apache/hadoop/blob/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/DefaultCodec.java  自带
gzip https://github.com/apache/hadoop/blob/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/GzipCodec.java  自带
bzip2 https://github.com/apache/hadoop/blob/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/BZip2Codec.java  自带
lz4 https://github.com/apache/hadoop/blob/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/Lz4Codec.java  自带
lzo Hadoop源代码里不含有编解码代码,可在https://github.com/twitter/hadoop-lzo找到相关编解码

 

1.下载hadoop源代码hadoop-2.7.1-src.tar.gz放置于/root下并解压缩 
cd /root  
wget http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.7.1/hadoop-2.7.1-src.tar.gz  
tar -zxvf hadoop-2.7.1-src.tar.gz    

2.准备Hadoop编译必备环境,请参见http://aperise.iteye.com/blog/2246856 
3.单独编译打包hadoop-common,获取对于snappy压缩的支持(如果想编译整个工程请参见http://aperise.iteye.com/blog/2246856) 
cd /root/hadoop-2.7.1-src  
export MAVEN_OPTS="-Xms256m -Xmx512m"  
mvn package -Pdist,native -DskipTests -Dtar -rf :hadoop-common -Drequire.snappy -X  
#如果想编译整个代码且单独指定snappy库位置,命令如下:  
#mvn package -Pdist,native,docs,src -DskipTests -Drequire.snappy -Dsnappy.lib=/usr/local/lib    

4.编译完成后在/root/hadoop-2.7.1-src/hadoop-dist/target/hadoop-2.7.1/lib/native下得到相关库文件

5.编译完成后在/root/hadoop-2.7.1-src/hadoop-dist/target/hadoop-2.7.1/share/hadoop/common下得到相关jar,其中最重要的就是hadoop-common-2.7.1.jar

    6.3 集成snappy到Hadoop和HBASE之中

1.将上面中编译的snappy支持文件拷贝到Hadoop中  
#这里我安装的Hadoop位置为/home/hadoop/hadoop-2.7.1  
cp -r /root/hadoop-2.7.1-src/hadoop-dist/target/hadoop-2.7.1/lib/native/* /home/hadoop/hadoop-2.7.1/lib/native/  
cp /usr/local/lib/* /home/hadoop/hadoop-2.7.1/lib/native/  
  
2.将上面中编译的的hadoop-common-2.7.1.jar文件拷贝到Hadoop  
#这里我安装的Hadoop位置为/home/hadoop/hadoop-2.7.1  
cp -r /root/hadoop-2.7.1-src/hadoop-dist/target/hadoop-2.7.1/share/hadoop/common/* /home/hadoop/hadoop-2.7.1/share/hadoop/common/   
  
3.修改hadoop的配置文件/home/hadoop/hadoop-2.7.1/etc/hadoop/core-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.Lz4Codec,    
  org.apache.hadoop.io.compress.SnappyCodec    
  </value>    
  <description>A comma-separated list of the compression codec classes that can    
  be used for compression/decompression. In addition to any classes specified    
  with this property (which take precedence), codec classes on the classpath    
  are discovered using a Java ServiceLoader.</description>    
</property>   
  
4.修改/home/hadoop/hadoop-2.7.1/etc/hadoop/mapred-site.xml,添加如下内容:  
<property>      
  <name>mapreduce.output.fileoutputformat.compress</name>      
  <value>true</value>      
  <description>Should the job outputs be compressed?      
  </description>      
</property>      
<property>      
  <name>mapreduce.output.fileoutputformat.compress.type</name>      
  <value>RECORD</value>      
  <description>If the job outputs are to compressed as SequenceFiles, how should      
               they be compressed? Should be one of NONE, RECORD or BLOCK.      
  </description>      
</property>      
<property>      
  <name>mapreduce.output.fileoutputformat.compress.codec</name>      
  <value>org.apache.hadoop.io.compress.SnappyCodec</value>      
  <description>If the job outputs are compressed, how should they be compressed?      
  </description>      
</property>      
<property>      
  <name>mapreduce.map.output.compress</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>mapreduce.map.output.compress.codec</name>      
  <value>org.apache.hadoop.io.compress.SnappyCodec</value>      
  <description>If the map outputs are compressed, how should they be       
               compressed?      
  </description>      
</property>     
        如果你是Hadoop2.x和Hadoop3.x版本,请采用此种方式,如果你是Hadoop1.x,请继续往下看

7.集成Snappy到Apache hadoop中(仅适用于Hadoop1.x,Hadoop2.x以后版本在hadoop-common模块已经内置snappy编解码)

    关于Snappy如何集成到Apache hadoop可以详见GitHub上hadoop-snappy的源代码https://github.com/electrum/hadoop-snappy说明,这里下面的步骤也是我参照源代码经过实践得来,关于更详细的内容(必须的依赖库,如何安装)请参见源代码说明。

  7.1 hadoop-snappy在github上的代码库地址(https://github.com/electrum/hadoop-snappy)

  7.2 源代码编译前的准备工作

    (1) linux库Snappy的安装
    ubuntu中使用apt-get install snappy安装,centos中使用yum -y install snappy安装,这里我个人习惯下载snappy源代码然后编译安装。
    注意:这里的linux库LZO需要在hadoop集群的每个节点都需要安装。
    (2)JDK安装
#安装jdk-7u65-linux-x64.gz
#下载jdk-7u65-linux-x64.gz放置于/opt/java/jdk-7u65-linux-x64.gz并解压
cd /opt/java/
tar -zxvf jdk-7u65-linux-x64.gz
#配置linux系统环境变量
vi /etc/profile
#在文件末尾追加如下内容
export JAVA_HOME=/opt/java/jdk1.7.0_65 
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 
export PATH=$PATH:$JAVA_HOME/bin 
#使配置生效
source /etc/profile
#检查JDK环境是否配置成功
java -version
    (3)MAVEN安装
#1.下载apache-maven-3.3.3.tar.gz放置于/opt/下并解压
cd /opt
tar zxvf apache-maven-3.3.3.tar.gz
#2.配置环境变量
vi /etc/profile
#添加如下内容
MAVEN_HOME=/opt/apache-maven-3.3.3
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin
#3.使配置生效
source /etc/profile
#4.检测maven是否安装成功
mvn -version
#5.配置maven仓库镜像,目前国内maven镜像建议使用阿里云库
vi /home/hadoop/.m2/settings.xml
#内容如下:
<?xml version="1.0" encoding="UTF-8"?>  
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">  
  <!--默认下载依赖放置于/home/hadoop/.m2/repository目录下,这里我指定我想存放于/opt/maven-localRepository-->  
  <localRepository>/opt/maven-localRepository</localRepository>  
  <pluginGroups></pluginGroups>  
  <proxies></proxies>  
  <servers></servers>  
  <mirrors>  
  <!--add by aperise start-->  
    <mirror>  
      <id>alimaven</id>  
      <name>aliyun maven</name>  
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
      <mirrorOf>central</mirrorOf>          
    </mirror>    
  <!--add by aperise end-->  
  </mirrors>  
  <profiles>  
  </profiles>  
</settings>  

  7.3 hadoop-snappy库编译安装

#下载并解压源代码hadoop-snappy-master
cd /home/hadoop
wget https://github.com/electrum/hadoop-snappy/archive/hadoop-snappy-master.zip
unzip hadoop-snappy-master.zip
cd /home/hadoop/hadoop-snappy-master
#编译中如果遇到问题,请参见http://www.cnblogs.com/shitouer/archive/2013/01/14/2859475.html进行解决
mvn package
     编译完成后会在/home/hadoop/hadoop-snappy-master/target下得到如下文件:
    其中hadoop-snappy-0.0.1-SNAPSHOT.tar.gz就是我们需要的文件,里面包含hadoop-snappy-0.0.1-SNAPSHOT.jar和相关库文件。

  7.4 集成hadoop-snappy库到hadoop-2.7.4

   需要拷贝hadoop-snappy-0.0.1-SNAPSHOT.jar到/home/hadoop/hadoop-2.7.4/share/hadoop/common/lib/下面,需要拷贝/home/hadoop/hadoop-snappy-0.0.1-SNAPSHOT/lib/native/Linux-amd64-64/下的文件到/home/hadoop/hadoop-2.7.4/lib/native/下面
#解压hadoop-snappy-0.0.1-SNAPSHOT.tar.gz
cp /home/hadoop/hadoop-snappy-master/target/hadoop-snappy-0.0.1-SNAPSHOT.tar.gz /home/hadoop/
cd /home/hadoop
tar -zxvf hadoop-snappy-0.0.1-SNAPSHOT.tar.gz
#拷贝jar和库到
cp -r /home/hadoop/hadoop-snappy-0.0.1-SNAPSHOT/lib/native/Linux-amd64-64/* /home/hadoop/hadoop-2.7.4/lib/native/
cp -r /home/hadoop/hadoop-snappy-0.0.1-SNAPSHOT/lib/hadoop-snappy-0.0.1-SNAPSHOT.jar /home/hadoop/hadoop-2.7.4/share/hadoop/common/lib
 

8.集成LZO到Apache hadoop中(另一个hadoop-lzo库,GitHub已经6年未更新,不建议用,因为hadoop权威指南提到,这里把实践的集成记录一下)(适用于Hadoop1.x、Hadoop2.x和Hadoop3.x)

    关于LZO如何集成到Apache hadoop可以详见GitHub上hadoop-lzo的源代码https://github.com/kevinweil/hadoop-lzo说明,这里下面的步骤也是我参照源代码经过实践得来,关于更详细的内容(必须的依赖库,如何安装,如何处理安装中LZO找不到,如何去使用LZO)请参见源代码说明。

  8.1 hadoop-lzo在github上的代码库地址(https://github.com/kevinweil/hadoop-lzo)

  8.2 源代码编译前的准备工作

    (1) linux库LZO的安装
    ubuntu中使用apt-get install lzo安装,centos中使用yum -y install lzo安装,这里我个人习惯下载lzo源代码然后编译安装。
    注意:这里的linux库LZO需要在hadoop集群的每个节点都需要安装。  
#linux安装lzo
#下载并解压linux库lzo源代码
cd /root
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.10.tar.gz
tar -zxvf lzo-2.10.tar.gz
#编译安装linuxlzo源代码
cd /root/lzo-2.10
./configure --enable-shared
make
make install
    (2)JDK安装
#安装jdk-7u65-linux-x64.gz
#下载jdk-7u65-linux-x64.gz放置于/opt/java/jdk-7u65-linux-x64.gz并解压
cd /opt/java/
tar -zxvf jdk-7u65-linux-x64.gz
#配置linux系统环境变量
vi /etc/profile
#在文件末尾追加如下内容
export JAVA_HOME=/opt/java/jdk1.7.0_65 
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 
export PATH=$PATH:$JAVA_HOME/bin 
#使配置生效
source /etc/profile
#检查JDK环境是否配置成功
java -version
    (3)ANT安装
#下载并解压apache-ant-1.8.2-bin.zip
cd /home/hadoop
wget http://mirrors.tuna.tsinghua.edu.cn/apache//ant/binaries/apache-ant-1.8.2-bin.zip
unzip apache-ant-1.8.2-bin.zip
#编辑/home/hadoop/.bashrc,在文件末尾追加如下内容
vi /home/hadoop/.bashrc
export ANT_HOME=/opt/apache-ant-1.8.2
export PATH=${PATH}:${ANT_HOME}/bin
#使得/home/hadoop/.bashrc配置生效
source /home/hadoop/.bashrc
#测试ant是否生效
ant -version

  8.3 hadoop-lzo库编译安装

#编译安装hadoop-lzo-master
cd /home/hadoop
wget https://github.com/kevinweil/hadoop-lzo/archive/hadoop-lzo-master.zip
unzip hadoop-lzo-master.zip
cd /home/hadoop/hadoop-lzo-master
#注意以下三行一起执行,前两行是指定LZO库文件所在位置
CFLAGS=-m64 \
CXXFLAGS=-m64 \
ant compile-native tar
    编译完成后会在/home/hadoop/hadoop-lzo-master/build下得到如下文件:
    其中hadoop-lzo-0.4.15-SNAPSHOT.jar和native就是我们需要的jar和库文件,在后面只需要拷贝jar和native下面的库文件到hadoop下即可完成集成,这里在/home/hadoop/hadoop-lzo-master/build/native/Linux-amd64-64/lib的库文件如下:

  8.4 集成hadoop-lzo库到hadoop-2.7.4

    需要拷贝hadoop-lzo-0.4.15-SNAPSHOT.jar到/home/hadoop/hadoop-2.7.4/share/hadoop/common/lib/下面,需要拷贝/home/hadoop/hadoop-lzo-master/target/native/Linux-amd64-64/lib/下的文件到/home/hadoop/hadoop-2.7.4/lib/native/下面
cp -r /home/hadoop/hadoop-lzo-master/build/native/Linux-amd64-64/lib/* /home/hadoop/hadoop-2.7.4/lib/native/
cp -r /home/hadoop/hadoop-lzo-master/build/hadoop-lzo-0.4.15-SNAPSHOT.jar /home/hadoop/hadoop-2.7.4/share/hadoop/common/lib/

    8.5 遇到的问题([javah] Error: Class org.apache.hadoop.conf.Configuration could not be found)

    编译中遇到的问题错误信息如下:
ivy-retrieve-common:
[ivy:retrieve] :: retrieving :: com.hadoop.gplcompression#Hadoop-GPL-Compression
[ivy:retrieve]  confs: [common]
[ivy:retrieve]  0 artifacts copied, 3 already retrieved (0kB/6ms)
[ivy:cachepath] DEPRECATED: 'ivy.conf.file' is deprecated, use 'ivy.settings.file' instead
[ivy:cachepath] :: loading settings :: file = /opt/hadoop-lzo-master/ivy/ivysettings.xml

init:

compile-java:
    [javac] /opt/hadoop-lzo-master/build.xml:243: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds

check-native-uptodate:

compile-native:
    [javah] Error: Class org.apache.hadoop.conf.Configuration could not be found.

BUILD FAILED
/opt/hadoop-lzo-master/build.xml:266: compilation failed
    解决办法如下,修改/opt/hadoop-lzo-master/build.xml中如下内容:
  <target name="compile-native" depends="compile-java,check-native-uptodate" unless="native.uptodate">
    <mkdir dir="${build.native}/lib"/>
    <mkdir dir="${build.native}/src/com/hadoop/compression/lzo"/>

    <javah classpath="${build.classes}"
  	   destdir="${build.native}/src/com/hadoop/compression/lzo"
           force="yes"
  	   verbose="yes">
      <class name="com.hadoop.compression.lzo.LzoCompressor" />
      <class name="com.hadoop.compression.lzo.LzoDecompressor" />
    </javah>
为ant的target=compile-native指定classpath,修改后为:
  <target name="compile-native" depends="compile-java,check-native-uptodate" unless="native.uptodate">
    <mkdir dir="${build.native}/lib"/>
    <mkdir dir="${build.native}/src/com/hadoop/compression/lzo"/>

    <javah classpath="${build.classes}"
  	   destdir="${build.native}/src/com/hadoop/compression/lzo"
           force="yes"
  	   verbose="yes">
      <class name="com.hadoop.compression.lzo.LzoCompressor" />
      <class name="com.hadoop.compression.lzo.LzoDecompressor" />
      <classpath refid="classpath"/>
    </javah>
 

9.Apache hadoop中配置压缩

  9.1HDFS配置压缩

   注意:这里可以配置多个
    core-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,
  com.hadoop.compression.lzo.LzoCodec,
  com.hadoop.compression.lzo.LzopCodec,
  org.apache.hadoop.io.compress.Lz4Codec,
  org.apache.hadoop.io.compress.SnappyCodec
  </value>
  <description>A comma-separated list of the compression codec classes that can
  be used for compression/decompression. In addition to any classes specified
  with this property (which take precedence), codec classes on the classpath
  are discovered using a Java ServiceLoader.</description>
</property>

       注意:hadoop是根据文件的后缀去寻找编解码用哪个,之前认为com.hadoop.compression.lzo.LzoCodec对应的后缀为".lzo"是错误的,查看了hadoop-lzo源代码发现".lzo"对应的编解码为com.hadoop.compression.lzo.LzopCodec,查看了源代码发现".lzo_deflate"对应的编解码为com.hadoop.compression.lzo.LzoCodec

  9.2 MAPREDUCE配置压缩

   注意:这里只能配置采用一种
   mapred-site.xml增加配置:
<property>
  <name>mapreduce.output.fileoutputformat.compress</name>
  <value>true</value>
  <description>Should the job outputs be compressed?
  </description>
</property>
<property>
  <name>mapreduce.output.fileoutputformat.compress.type</name>
  <value>RECORD</value>
  <description>If the job outputs are to compressed as SequenceFiles, how should
               they be compressed? Should be one of NONE, RECORD or BLOCK.
  </description>
</property>
<property>
  <name>mapreduce.output.fileoutputformat.compress.codec</name>
  <value>org.apache.hadoop.io.compress.SnappyCodec</value>
  <description>If the job outputs are compressed, how should they be compressed?
  </description>
</property>
<property>
  <name>mapreduce.map.output.compress</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>mapreduce.map.output.compress.codec</name>
  <value>org.apache.hadoop.io.compress.SnappyCodec</value>
  <description>If the map outputs are compressed, how should they be 
               compressed?
  </description>
</property>
分享到:
评论

相关推荐

    hadoop3.x带snappy(可用于windows本地开发)

    【标题】"hadoop3.x带snappy(可用于windows本地开发)"所涉及的知识点主要集中在Hadoop 3.0版本以及Snappy压缩算法在Windows环境下的应用。Hadoop是一个开源的大数据处理框架,由Apache软件基金会开发,它使得在...

    22、MapReduce使用Gzip压缩、Snappy压缩和Lzo压缩算法写文件和读取相应的文件

    2. Snappy压缩 Snappy是由Google开发的一种快速压缩和解压缩算法,虽然压缩率不如Gzip高,但速度更快,适合对性能敏感的场景。在MapReduce中,通过设置`mapreduce.output.fileoutputformat.compress.codec`为`org....

    支持snappy压缩的hadoop,直接下载到本地,解压后即可使用

    标题中的“支持snappy压缩的hadoop”指的是Hadoop,一个开源的大数据处理框架,集成了对Snappy压缩算法的支持。Snappy是由谷歌开发的一种高效、快速的数据压缩和解压缩库,尤其适合大数据环境下的I/O操作。在Hadoop...

    2.Hadoop-lzo.7z lzo源码+包

    标题中的“2.Hadoop-lzo.7z lzo源码+包”指的是一个包含Hadoop-LZO相关的源代码和预编译的库文件的压缩包。Hadoop-LZO是Hadoop生态系统中的一个扩展,它提供了对LZO(一种高效的压缩算法)的支持。LZO是一种快速的...

    hadoop-snappy的java包

    在使用Snappy压缩时,需要注意其与Hadoop其他压缩格式(如Gzip或LZO)的性能差异。Snappy在压缩率上可能略逊于Gzip,但其压缩和解压缩速度更快,更适合大数据实时处理场景。因此,根据具体应用的需求,选择合适的...

    hadoop-lzo-0.4.20.jar

    hadoop支持LZO压缩配置 将编译好后的hadoop-lzo-0.4.20.jar 放入hadoop-2.7.2/share/hadoop/common/ core-site.xml增加配置支持LZO压缩 &lt;name&gt;io.compression.codecs org.apache.hadoop.io....

    hadoop-cdh4.3-lzo安装及问题解决

    1. **依赖冲突**:可能会遇到其他压缩库(如Gzip或Bzip2)与LZO之间的依赖冲突,解决方法是明确指定Hadoop使用LZO作为默认的压缩算法。 2. **权限问题**:如果Hadoop用户没有对LZO库的读写权限,可能会导致运行错误...

    编译hadoop-2.5.0-cdh5.3.6 + snappy 源码的native包

    - 安装Snappy库:Hadoop需要链接到Snappy库才能支持Snappy压缩,可以通过`yum install -y libsnappy-devel`命令安装。 2. **获取源码**: - 下载Hadoop源码:从Apache官网或其他镜像站点下载Hadoop 2.5.0的源码包...

    hadoop-lzo-0.4.21-SNAPSHOT jars

    总的来说,Hadoop-LZO是一个针对Hadoop的LZO压缩解决方案,它提供了一种高效的数据压缩方式,尤其适合大数据处理场景,通过这个特定版本的库,开发者可以在Mac环境下为Hadoop 2.8.0实现LZO压缩功能,提升数据处理的...

    hadoop-lzo-0.4.21-SNAPSHOT.jar

    2. 数据压缩:Hadoop LZO提供了一种名为`LZOFileFormat`的文件格式,可以用来创建和读取LZO压缩的文件。通过设置`mapreduce.output.fileoutputformat.class`属性为`com.hadoop.compression.lzo.LZOFileOutputFormat`...

    Hadoop源码编译支持Snappy压缩教程

    ### Hadoop源码编译支持Snappy压缩教程 #### 一、Snappy压缩技术简介 在大数据处理领域,数据压缩技术对于提高存储效率和降低I/O开销具有重要作用。Snappy是一种高效的压缩与解压缩算法,它在压缩比与速度之间取得...

    hadoop-lzo-0.4.15.tar.gz

    LZO压缩的优势在于其快速的压缩和解压缩速度,尽管它的压缩率相比其他算法如Gzip或Bzip2较低,但这种牺牲在大数据处理场景中往往是可以接受的,因为它能显著减少I/O操作的时间,从而加快整体处理速度。Hadoop LZO库...

    hadoop-lzo-master.zip

    2. 调整Hadoop的Block大小以匹配LZO压缩后的数据块大小。 3. 对数据进行预处理,如去除重复或无用的信息,以减少压缩前的数据量。 六、应用场景 Hadoop-LZO广泛应用于需要高效数据压缩和解压缩的场景,如日志分析...

    Hadoop的Codec(LZO代码库)

    此外,Hadoop社区还发展了其他兼容Hadoop的压缩库,如Snappy和lz4,它们也提供良好的性能和压缩效率,用户可以根据实际需求进行选择。 在Hadoop-gpl-compression-0.1.0这个特定的压缩包中,很可能包含了实现Hadoop...

    lzo-2.06&hadoop;-lzo

    LZO的压缩率可能不如其他更为复杂的压缩算法如GZIP或BZIP2,但它在处理大量数据时的低延迟和低CPU使用率成为其在大数据处理和流式计算中的首选。 标题中的“lzo-2.06”指的是LZO的2.06版本,这是一个稳定且广泛使用...

    hadoop2.7.2 之 snappy压缩支持包.zip

    在Hadoop 2.7.2版本中,引入了对Snappy压缩算法的支持,这是一种高效的数据压缩库,尤其适合大数据环境。这个压缩支持包是针对Hadoop 2.7.2版本的,用于增强其在数据压缩方面的能力。 Snappy是由Google开发的,旨在...

    Hadoop集群上Snappy压缩算法的安装配置

    Snappy 压缩算法的安装配置在 Hadoop 集群上 Snappy 压缩算法是一种高效的压缩算法,广泛应用于 Hadoop 和 HBase 等大数据处理系统中。 本篇文章将介绍 Snappy 压缩算法在 Hadoop 集群上的安装配置过程,并分享一些...

Global site tag (gtag.js) - Google Analytics