`
youkimra
  • 浏览: 34759 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hadoop 压缩文件处理

 
阅读更多
转:

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

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

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

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

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

压缩解压的速度很快
Lzo压缩是基于Block分块的,这样,一个大的文件(在Hadoop上可能会占用多个Block块),就可以由多个MapReduce并行来进行处理
虽然Lzo的压缩比没有Gzip高,不过由于其前2个特性,在Hadoop上使用Lzo还是能整体提升集群的性能的

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

Gzip压缩,耗时480s,Gunzip解压,耗时180s,压缩后大小为2.5G
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压缩要好不少

分享到:
评论
1 楼 xuyuanshuaaa 2011-10-11  
lz你好,我想问下 “对于Gzip压缩的文件,即使我们设置了setMaxInputSplitSize,最终的Map数仍然是输入文件的数目12”,此处的map个数为什么不是一个呢?当把gzip文件作为输入时,mapreduce无法分割读取 所以会分到一个map任务上,之后map进行解压成12个log文件 独自处理,不知道我的理解对么 请指教~

相关推荐

    Java写的hadoop压缩worldcount例子

    `InputFormat`会解析压缩文件,将压缩块转化为可以被Map任务处理的记录。`OutputFormat`则会在Reduce阶段结束后,将结果数据压缩后再写入到HDFS。 此外,为了使程序能正确运行,还需要正确配置Hadoop的环境变量,...

    hadoop压缩支持包和native 文件

    一、Hadoop压缩支持 Hadoop提供了多种内置的压缩算法,以优化数据传输和存储效率。这些压缩算法包括Gzip、BZip2、LZO、Snappy和LZ4等。每种压缩算法都有其特点和适用场景: 1. Gzip:广泛使用的压缩算法,压缩率较...

    hadoop数据输出压缩

    #### 配置Hadoop压缩参数 为了启用和控制Hadoop的数据输出压缩,有以下几个关键的配置参数: 1. **mapred.output.compress**: - 类型:布尔型 - 默认值:false - 作用:用于指定Reduce阶段的输出是否进行压缩。...

    配置hadoop支持LZO和snappy压缩.pdf

    Hadoop配置支持LZO和Snappy压缩技术的过程是分布式数据处理中一个重要环节,这对于提升数据处理效率和优化存储空间使用具有重大意义。下面将详细介绍配置Hadoop以支持LZO和Snappy压缩的关键步骤和知识点。 首先,...

    hadoop相关配置文件.zip

    本压缩包包含的是一系列Hadoop的核心配置文件,这些文件对于理解和管理Hadoop集群至关重要。接下来,我们将深入探讨每个配置文件及其重要选项。 首先,`core-site.xml`是Hadoop的核心配置文件,它定义了Hadoop的...

    hadoop3.1.1native文件含zstd

    标题中的“hadoop3.1.1native文件含zstd”指的是Hadoop 3.1.1版本在CentOS 7 64位系统上编译的本地库(native库)包含了对Zstandard(简称zstd)压缩算法的支持。Zstandard是一种高效的压缩和解压缩算法,设计用于...

    Hadoop海量文本处理3-中国电信

    ### Hadoop海量文本处理概述 #### 一、Hadoop生态系统概览 Hadoop是一个开源软件框架,主要用于存储和处理大规模数据集。它基于Google的MapReduce论文和Google File System论文设计,由Apache软件基金会维护。...

    本地hadoop支持文件.rar

    Hadoop是Apache软件基金会开发的一个开源分布式计算框架,而Spark是另一个流行的大数据处理框架,它可以在Hadoop之上运行。了解这些文件的作用和如何正确配置它们对于在Windows上搭建和运行Hadoop生态系统至关重要。...

    hadoop上传文件共5页.pdf.zip

    【压缩包子文件的文件名称列表】: "赚钱项目" 这个条目可能表示压缩包内的PDF文件内容是关于如何利用Hadoop进行数据驱动的盈利项目,或者是在Hadoop环境中执行的数据分析项目,旨在帮助用户或企业通过数据分析来提高...

    hadoop/bin目录文件,含hadoop.dll + winutils.exe

    至于压缩包子文件“9.pptx”,可能是关于Hadoop、Spark在Windows环境下的使用教程或者介绍资料,可能包含了如何配置Hadoop环境、如何使用winutils.exe以及如何在Windows 7上开发和调试Spark应用程序等内容。...

    支持snappy压缩的hadoop2.7.2

    在Hadoop 2.7.2版本中,引入了对Snappy压缩的支持,这是一个高效的压缩和解压缩库,尤其适合大数据处理场景。Snappy以其快速的压缩和解压速度以及相对较低的内存消耗而闻名,对于提升Hadoop集群的性能有着显著的作用...

    不同Hadoop版本winutils文件包

    压缩包子文件“hadoop-winutils”很可能包含了适用于不同Hadoop版本的winutils.exe文件,可能有多个版本以适应不同的Hadoop发行版。用户需要根据自己的Hadoop版本选择合适的winutils文件,然后按照上述方法进行配置...

    基于LZO的Hadoop文件归档优化方法.docx

    本文针对Hadoop架构在大数据处理和分析中的应用进行了深入探讨,特别是在文件归档方面的优化,利用LZO(Lempel-Ziv-Oberhumer)压缩算法,提升数据存储效率和处理性能。 一、LZO算法 LZO是一种快速的无损数据压缩...

    hadoop2.7.1-win32.zip

    Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它允许在大量计算机节点上处理和存储海量数据。这个压缩包包含了在Windows环境下运行Hadoop所需的特定组件。 描述 "win32平台winutils,hadoop win32 ...

    Hadoop本地环境配置 需要的文件hadoopdll和winutilexe.zip

    2. **解压Hadoop**: 解压缩下载的Hadoop文件到你希望的目录,例如`C:\hadoop`. 3. **配置环境变量**: 在系统环境变量中添加`HADOOP_HOME`,值设为Hadoop的安装路径,如`C:\hadoop`。 4. **配置PATH**: 同样在环境...

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

    Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它的核心设计目标是...通过替换Hadoop的原生库文件并适当配置,可以充分利用Snappy的高速压缩性能,优化存储和计算资源的利用,提升整个Hadoop集群的运行效率。

    hadoop-3.1.0-windows依赖文件.7z

    1. **解压文件**: 首先,将"hadop-3.1.0-windows.7z"解压缩到一个合适的目录。 2. **配置环境变量**: 设置HADOOP_HOME环境变量指向Hadoop的安装目录,并将%HADOOP_HOME%\bin添加到PATH环境变量。 3. **编辑配置...

Global site tag (gtag.js) - Google Analytics