`

Hadoop集群上使用Lzo压缩

 
阅读更多

转自:http://www.tech126.com/hadoop-lzo/

自从Hadoop集群搭建以来,我们一直使用的是Gzip进行压缩

当时,我对gzip压缩过的文件和原始的log文件分别跑MapReduce测试,最终执行速度基本差不多

而且Hadoop原生支持Gzip解压,所以,当时就直接采用了Gzip压缩的方式

关于Lzo压缩,twitter有一篇文章,介绍的比较详细,见这里

Lzo压缩相比Gzip压缩,有如下特点:

  1. 压缩解压的速度很快
  2. Lzo压缩是基于Block分块的,这样,一个大的文件(在Hadoop上可能会占用多个Block块),就可以由多个MapReduce并行来进行处理

虽然Lzo的压缩比没有Gzip高,不过由于其前2个特性,在Hadoop上使用Lzo还是能整体提升集群的性能的

我测试了12个log文件,总大小为8.4G,以下是Gzip和Lzo压缩的结果:

  1. Gzip压缩,耗时480s,Gunzip解压,耗时180s,压缩后大小为2.5G
  2. Lzo压缩,耗时160s,Lzop解压,耗时110s,压缩后大小为4G

以下为在Hadoop集群上使用Lzo的步骤:

1. 在集群的所有节点上安装Lzo库,可从这里下载

cd /opt/ysz/src/lzo-2.04

./configure –enable-shared

make

make install

#编辑/etc/ld.so.conf,加入/usr/local/lib/后,执行/sbin/ldconfig

或者cp /usr/local/lib/liblzo2.* /usr/lib64/

#如果没有这一步,最终会导致以下错误:

lzo.LzoCompressor: java.lang.UnsatisfiedLinkError: Cannot load liblzo2.so.2 (liblzo2.so.2: cannot open shared object file: No such file or directory)!

2. 编译安装Hadoop Lzo本地库以及Jar包,从这里下载

    export CFLAGS=-m64

    export CXXFLAGS=-m64

    ant compile-native tar

    #将本地库以及Jar包拷贝到hadoop对应的目录下,并分发到各节点上

    cp lib/native/Linux-amd64-64/* /opt/sohuhadoop/hadoop/lib/native/Linux-amd64-64/

    cp hadoop-lzo-0.4.10.jar /opt/sohuhadoop/hadoop/lib/

3. 设置Hadoop,启用Lzo压缩

vi core-site.xml

<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,org.apache.hadoop.io.compress.BZip2Codec</value>

</property>

<property>     

<name>io.compression.codec.lzo.class</name>     

<value>com.hadoop.compression.lzo.LzoCodec</value>

</property>

 

vi 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>

4. 安装lzop,从这里下载

 

下面就是使用lzop压缩log文件,并上传到Hadoop上,执行MapReduce操作,测试的Hadoop是由3个节点组成集群

lzop -v 2011041309.log

hadoop fs -put *.lzo /user/pvlog

#给Lzo文件建立Index

hadoop jar /opt/sohuhadoop/hadoop/lib/hadoop-lzo-0.4.10.jar com.hadoop.compression.lzo.LzoIndexer /user/pvlog/

写一个简单的MapReduce来测试,需要指定InputForamt为Lzo格式,否则对单个Lzo文件仍不能进行Map的并行处理

job.setInputFormatClass(com.hadoop.mapreduce.LzoTextInputFormat.class);

可以通过下面的代码来设置Reduce的数目:

job.setNumReduceTasks(8);

最终,12个文件被切分成了36个Map任务来并行处理,执行时间为52s,如下图:

我们配置Hadoop默认的Block大小是128M,如果我们想切分成更多的Map任务,可以通过设置其最大的SplitSize来完成:

FileInputFormat.setMaxInputSplitSize(job, 64 *1024 * 1024);

最终,12个文件被切分成了72个Map来处理,但处理时间反而长了,为59s,如下图:

而对于Gzip压缩的文件,即使我们设置了setMaxInputSplitSize,最终的Map数仍然是输入文件的数目12,执行时间为78s,如下图:

从以上的简单测试可以看出,使用Lzo压缩,性能确实比Gzip压缩要好不少

分享到:
评论

相关推荐

    hadoop集群内lzo的安装与配置

    Hadoop 集群中使用 LZO,可以提高数据处理速度和存储效率。本文将详细介绍如何在 Hadoop 集群中安装和配置 LZO。 一、环境准备 本文假设使用 CentOS 5.5 操作系统和 Hadoop-0.20.2-CDH3B4 版本。 二、安装所需...

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

    为了在Hadoop集群中使用LZO,有两种主要的方法: 1. **融入Hadoop源码**:首先,你需要获取Hadoop的源代码,然后将LZO的源代码整合进Hadoop项目。这通常涉及将LZO的Java代码添加到Hadoop的源代码树中,修改相应的...

    hadoop-lzo-0.4.20.jar

    5. **与Hadoop的集成**:Hadoop-LZO库提供了与Hadoop的无缝集成,允许用户直接在Hadoop作业中使用LZO压缩,无需额外的复杂配置。 然而,值得注意的是,虽然LZO速度快,但其压缩比低可能会导致存储成本增加。因此,...

    hadoop-lzo-0.4.21-SNAPSHOT.jar

    这个JAR文件需要添加到Hadoop的类路径(classpath)中,以便Hadoop集群能够识别并使用LZO压缩格式。 在实际使用Hadoop LZO时,我们需要进行以下步骤: 1. 安装和配置:首先,下载hadoop-lzo-0.4.21-SNAPSHOT.jar,...

    lzo 2.0.6、hadoop-lzo-master、apache-maven

    综合来看,这个压缩包可能是一个用于大数据处理环境的工具集,其中`lzo-2.06.tar.gz`提供了LZO压缩库,`hadoop-lzo-master.zip`包含了在Hadoop上使用LZO的代码,而`apache-maven-3.3.9-bin.tar.gz`则是用于构建和...

    hadoop-lzo-0.4.21-SNAPSHOT jars

    描述中提到的"Mac下编译的hadoop-lzo"意味着这个版本是在Mac操作系统上编译构建的,这确保了在Mac环境下运行Hadoop集群时,可以顺利集成和使用这个压缩库。Hadoop-LZO的源代码编译通常涉及到Java开发环境(JDK)、...

    lzo-2.06&hadoop;-lzo

    文件“lzo-2.06.tar.gz”是LZO源代码的归档文件,通过解压可以获得LZO的源代码,开发者或系统管理员可以编译安装这个库,以便在自己的系统上使用LZO压缩和解压缩工具。而“hadoop-lzo-master.zip”则是Hadoop-LZO...

    hadoop-lzo-master.zip

    理解并掌握Hadoop-LZO的原理和使用方法,对于优化Hadoop集群的性能和资源利用率具有重要意义。在实际项目中,根据具体需求选择合适的压缩算法,结合Hadoop-LZO的特性,可以为大数据处理带来显著的优势。

    hadoop-lzo-0.4.15.tar.gz

    为了在Hadoop集群中使用Hadoop LZO,用户需要将库文件添加到Hadoop的类路径中,并配置Hadoop的属性,如`io.compression.codecs`和`io.compression.codec.lzo.class`,以启用LZO压缩支持。同时,还需要确保集群中的...

    hadoop集群内lzo的安装与配置.doc

    【Hadoop集群LZO安装与配置】 在大数据处理领域,Hadoop是一个广泛使用的开源框架,而LZO是一种高效的压缩算法,常用于Hadoop集群中,以减少数据存储和传输的开销。本文将详细介绍如何在运行CentOS 5.5且安装了...

    Hadoop的Codec(LZO代码库)

    在Hadoop集群中部署LZO,通常包括以下步骤: 1. 安装LZO库:首先需要在所有节点上安装LZO库,包括编译工具和库文件。 2. 获取并编译Hadoop LZO插件:从GitHub或其他源获取Hadoop-LZO项目,编译生成的jar文件。 3. ...

    hadoop-lzo所需包

    完成上述步骤后,Hadoop集群就可以使用LZO压缩功能了。在HDFS上存储数据时可以选择LZO压缩,或者在MapReduce作业中对输入数据进行LZO解压,以充分利用其高效性和低延迟特性。同时,为了确保集群中的所有节点都能正确...

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

    在大数据处理领域,...同时,了解各种压缩算法的特点和性能,对于优化Hadoop集群的性能和资源利用率至关重要。在实际操作中,应根据具体的数据特性和业务需求,进行适当的测试和调优,以找到最适合的压缩策略。

    hadoop集群安装、配置、维护文档

    这包括安装LZO开发库,编译Hadoop的源代码以支持LZO,创建必要的自定义编解压器,以及在Hadoop的配置文件中启用LZO压缩。 4. **安装hive客户端.txt**: Hive是基于Hadoop的数据仓库工具,允许用户使用SQL查询HDFS...

    Lzo压缩安装包

    Hadoop-lzo是针对Hadoop生态系统优化的Lzo实现,它允许Hadoop集群在MapReduce作业中直接处理Lzo压缩的文件。Hadoop-lzo不仅包含了对Lzo库的集成,还提供了一个名为`GzipIndexer`的工具,用于创建Lzo文件的索引,使得...

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

    2. **编译和安装**:使用Apache Maven或其他构建工具编译LZO源代码,并将其安装到Hadoop集群的每个节点上。 3. **配置Hadoop**:修改Hadoop的相关配置文件(如`hadoop-env.sh`,`core-site.xml`),设置LZO的路径和...

    hadoop-lzo-release-0.4.20.zip

    使用Hadoop-LZO时,用户需要将其配置到Hadoop集群中,然后在需要压缩的数据流上应用LZO。这可能涉及到修改Hadoop作业的配置,或者在HDFS中启用默认的块压缩。同时,需要注意的是,使用LZO压缩需要在集群中安装相应的...

Global site tag (gtag.js) - Google Analytics