`
youkimra
  • 浏览: 33727 次
  • 性别: 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文件 独自处理,不知道我的理解对么 请指教~

相关推荐

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

    本文分为3部分,即Gzip压缩文件的写与读、Snappy压缩文件的写与读和Lzo压缩文件的写与读。 ———————————————— 版权声明:本文为CSDN博主「一瓢一瓢的饮 alanchan」的原创文章,遵循CC 4.0 BY-SA版权...

    Hadoop权威指南 中文版

     ·熟悉hadoop的数据和ilo构件,用于压缩、数据集成、序列化和持久处理  ·洞悉编~mapreduce实际应用时的常见陷阱和高级特性  ·设计、构建和管理一个专用的hadoop集群或在云上运行hadoop  ·使用高级查询语言...

    Hadoop权威指南 第二版(中文版)

     本书从Hadoop的缘起开始,由浅入深,结合理论和实践,全方位地介绍Hadoop这一高性能处理海量数据集的理想工具。全书共16章,3个附录,涉及的主题包括:Haddoop简介;MapReduce简介;Hadoop分布式文件系统;Hadoop...

    Hadoop压缩实现分析

    在使用压缩方式方面,主要考虑压缩速度和压缩文件的可分割性。综合所述,使用压缩的优点如下:节省数据占用的磁盘空间;加快数据在磁盘和网络中的传输速度,从而提高系统的处理速度。随着云时代的来临,大数据(Big...

    Hadoop权威指南(中文版)2015上传.rar

    第3章 Hadoop分布式文件系统 HDFS的设计 HDFS的概念 数据块 namenode和datanode 命令行接口 基本文件系统操作 Hadoop文件系统 接口 Java接口 从Hadoop URL中读取数据 通过FileSystem API读取数据 写入数据 目录 查询...

    Hadoop实战中文版

    《Hadoop实战》分为3个部分,深入浅出地介绍了Hadoop框架、编写和运行Hadoop数据处理程序所需的实践技能及Hadoop之外更大的生态系统。《Hadoop实战》适合需要处理大量离线数据的云计算程序员、架构师和项目经理阅读...

    Hadoop: The Definitive Guide

    ·熟悉Hadoop的数据和IlO构件,用于压缩、数据集成、序列化和持久处理 ·洞悉编~MapReduce实际应用时的常见陷阱和高级特性 ·设计、构建和管理一个专用的Hadoop集群或在云上运行Hadoop ·使用高级查询语言Pig来处理...

    Hadoop 权威指南(中文版)

     ·熟悉hadoop的数据和ilo构件,用于压缩、数据集成、序列化和持久处理  ·洞悉编~mapreduce实际应用时的常见陷阱和高级特性  ·设计、构建和管理一个专用的hadoop集群或在云上运行hadoop  ·使用高级查询...

    中文版Hadoop权威指南

     ·熟悉hadoop的数据和ilo构件,用于压缩、数据集成、序列化和持久处理  ·洞悉编~mapreduce实际应用时的常见陷阱和高级特性  ·设计、构建和管理一个专用的hadoop集群或在云上运行hadoop  ·使用高级查询...

    Hadoop权威指南

    《Hadoop权威指南(影印版)(第3版)(修订版)》的内容包括:使用Hadoop分布式文件系统(HDFS)保存大数据集;使用MapReduce运行分布式计算;使用Hadoop的数据和I/O构件实现压缩、数据完整性、序列化(包括Avro)和持久...

    Hadoop实战(第2版)

    4.4 本章小结5 优化HDFS 处理大数据的技术5.1 处理小文件技术点24 使用Avro 存储大量小文件5.2 通过压缩提高数据存储效率技术点25 选择合适的压缩解码器技术点26 在HDFS、MapReduce、Pig 和Hive 中使用...

    Hadoop实战中文版.PDF

    24012.4.2 ES2爬虫 24112.4.3 ES2分析 24212.4.4 小结 24912.4.5 参考文献 250附录A HDFS文件命令 251构建hadoop运算坚实的平台编辑百度构建了超大规模的服务器集群来运行Hadoop,其中日志处理与分析占到...

    HADOOP权威指南 第3版 PDF电子书下载 带目录书签 完整版.z01

    《Hadoop权威指南(第3版)(修订版)(影印版)》的内容包括:使用Hadoop分布式文件系统(HDFS)保存大数据集;使用MapReduce运行分布式计算;使用Hadoop的数据和I/O构件实现压缩、数据完整性、序列化(包括Avro)...

    基于Hadoop的煤矿数据中心架构设计

    采用Hadoop分布式文件系统(HDFS)实现文件的可靠存储,并采用HBase分布式存储数据库实现历史数据的持久化存储,利用其无模式稀疏设计满足同一时空坐标体系下的数据分析需求;采用Redis作为实时数据库存储数据快照...

    hadoop-lzo:Hadoop 0.20的code.google.comhadoop-gpl-compression重构版本

    该项目重新启用了与LZO压缩文件的并行性,并且还带有用于处理LZO文件的标准实用程序(输入/输出流等)。起源该项目建立在所做的出色工作的基础上。 从第41期开始,此代码库中的区别如下。 它修复了hadoop-gpl-...

    大数据云计算技术 暴风集团基于hadoop的数据平台总体架构简介(共18页).ppt

    IUPushRsync 程序利用rsync -U 命令对日志文件进行增量式同步,其优点在于:1)准实时数据压缩传输(降低宽带占用);2)数据完整性检验 数据平台之hadoop Hadoop 是一个能够对PB级数据进行分布式 并行处理的软件...

    Hadoop实战

    313.1 HDFS文件操作 313.1.1 基本文件命令 323.1.2 编程读写HDFS 353.2 剖析MapReduce程序 373.2.1 Hadoop数据类型 393.2.2 Mapper 403.2.3 Reducer 413.2.4 Partitioner:重定向Mapper输出 413.2.5 Combiner:本地...

    Hadoop实战(陆嘉恒)译

    map侧过滤后在reduce侧联结5.3 创建一个Bloom filter5.3.1 Bloom filter做了什么5.3.2 实现一个Bloom filter5.3.3 Hadoop 0.20 以上版本的Bloom filter5.4 温故知新5.5 小结5.6 更多资源第6 章 编程实践6.1 开发...

    Hadoop硬实战 [(美)霍姆斯著][电子工业出版社][2015.01]_PDF电子书下载 带书签目录 高清完整版.rar )

    3 数据序列化――处理文本文件及其他格式的文件 3.1 了解MapReduce 中的输入和输出 3.1.1 数据输入 3.1.2 数据输出 3.2 处理常见的序列化格式 3.2.1 XML . 技术点12 MapReduce 和XML 3.2.2 JSON...

Global site tag (gtag.js) - Google Analytics