转:
自从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压缩要好不少
分享到:
相关推荐
`InputFormat`会解析压缩文件,将压缩块转化为可以被Map任务处理的记录。`OutputFormat`则会在Reduce阶段结束后,将结果数据压缩后再写入到HDFS。 此外,为了使程序能正确运行,还需要正确配置Hadoop的环境变量,...
一、Hadoop压缩支持 Hadoop提供了多种内置的压缩算法,以优化数据传输和存储效率。这些压缩算法包括Gzip、BZip2、LZO、Snappy和LZ4等。每种压缩算法都有其特点和适用场景: 1. Gzip:广泛使用的压缩算法,压缩率较...
#### 配置Hadoop压缩参数 为了启用和控制Hadoop的数据输出压缩,有以下几个关键的配置参数: 1. **mapred.output.compress**: - 类型:布尔型 - 默认值:false - 作用:用于指定Reduce阶段的输出是否进行压缩。...
Hadoop配置支持LZO和Snappy压缩技术的过程是分布式数据处理中一个重要环节,这对于提升数据处理效率和优化存储空间使用具有重大意义。下面将详细介绍配置Hadoop以支持LZO和Snappy压缩的关键步骤和知识点。 首先,...
本压缩包包含的是一系列Hadoop的核心配置文件,这些文件对于理解和管理Hadoop集群至关重要。接下来,我们将深入探讨每个配置文件及其重要选项。 首先,`core-site.xml`是Hadoop的核心配置文件,它定义了Hadoop的...
标题中的“hadoop3.1.1native文件含zstd”指的是Hadoop 3.1.1版本在CentOS 7 64位系统上编译的本地库(native库)包含了对Zstandard(简称zstd)压缩算法的支持。Zstandard是一种高效的压缩和解压缩算法,设计用于...
### Hadoop海量文本处理概述 #### 一、Hadoop生态系统概览 Hadoop是一个开源软件框架,主要用于存储和处理大规模数据集。它基于Google的MapReduce论文和Google File System论文设计,由Apache软件基金会维护。...
Hadoop是Apache软件基金会开发的一个开源分布式计算框架,而Spark是另一个流行的大数据处理框架,它可以在Hadoop之上运行。了解这些文件的作用和如何正确配置它们对于在Windows上搭建和运行Hadoop生态系统至关重要。...
【压缩包子文件的文件名称列表】: "赚钱项目" 这个条目可能表示压缩包内的PDF文件内容是关于如何利用Hadoop进行数据驱动的盈利项目,或者是在Hadoop环境中执行的数据分析项目,旨在帮助用户或企业通过数据分析来提高...
至于压缩包子文件“9.pptx”,可能是关于Hadoop、Spark在Windows环境下的使用教程或者介绍资料,可能包含了如何配置Hadoop环境、如何使用winutils.exe以及如何在Windows 7上开发和调试Spark应用程序等内容。...
在Hadoop 2.7.2版本中,引入了对Snappy压缩的支持,这是一个高效的压缩和解压缩库,尤其适合大数据处理场景。Snappy以其快速的压缩和解压速度以及相对较低的内存消耗而闻名,对于提升Hadoop集群的性能有着显著的作用...
压缩包子文件“hadoop-winutils”很可能包含了适用于不同Hadoop版本的winutils.exe文件,可能有多个版本以适应不同的Hadoop发行版。用户需要根据自己的Hadoop版本选择合适的winutils文件,然后按照上述方法进行配置...
本文针对Hadoop架构在大数据处理和分析中的应用进行了深入探讨,特别是在文件归档方面的优化,利用LZO(Lempel-Ziv-Oberhumer)压缩算法,提升数据存储效率和处理性能。 一、LZO算法 LZO是一种快速的无损数据压缩...
Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它允许在大量计算机节点上处理和存储海量数据。这个压缩包包含了在Windows环境下运行Hadoop所需的特定组件。 描述 "win32平台winutils,hadoop win32 ...
2. **解压Hadoop**: 解压缩下载的Hadoop文件到你希望的目录,例如`C:\hadoop`. 3. **配置环境变量**: 在系统环境变量中添加`HADOOP_HOME`,值设为Hadoop的安装路径,如`C:\hadoop`。 4. **配置PATH**: 同样在环境...
Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它的核心设计目标是...通过替换Hadoop的原生库文件并适当配置,可以充分利用Snappy的高速压缩性能,优化存储和计算资源的利用,提升整个Hadoop集群的运行效率。
1. **解压文件**: 首先,将"hadop-3.1.0-windows.7z"解压缩到一个合适的目录。 2. **配置环境变量**: 设置HADOOP_HOME环境变量指向Hadoop的安装目录,并将%HADOOP_HOME%\bin添加到PATH环境变量。 3. **编辑配置...