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

hadoop对于压缩文件的支持及算法优缺点

 
阅读更多

如果我们压缩的文件有相应压缩格式的扩展名(比如lzo,gz,bzip2等),hadoop就会根据扩展名去选择解码器解压。

 

压缩格式 工具 算法 文件扩展名 多文件 可分割性
DEFLATE DEFLATE .deflate
gzip gzip DEFLATE .gz
ZIP zip DEFLATE .zip 是,在文件范围内
bzip2 bzip2 bzip2 .bz2
LZO lzop LZO .lzo

 

 

  

         

      如果压缩的文件没有扩展名,则需 要在执行mapreduce任务的时候指定输入格式.

hadoop jar /usr/home/hadoop/hadoop-0.20.2/contrib/streaming/hadoop-streaming-0.20.2-CD H3B4.jar -
file /usr/home/hadoop/hello/mapper.py -
mapper /usr/home/hadoop/hello/mapper.py -
file /usr/home/hadoop/hello/reducer.py -
reducer /usr/home/hadoop/hello/reducer.py -input lzotest -output result4 -jobconf mapred.reduce.tasks=1 *-inputformat org.apache.hadoop.mapred.LzoTextInputFormat*

  hadoop下各种压缩算法的压缩比,压缩时间,解压时间见下表:

 

压缩算法 原始文件大小 压缩后的文件大小 压缩速度 解压缩速度
gzip   8.3GB   1.8GB 17.5MB/s 58MB/s
bzip2 8.3GB 1.1GB 2.4MB/s 9.5MB/s
LZO-bset 8.3GB 2GB 4MB/s 60.6MB/s
LZO 8.3GB 2.9GB 49.3MB/S 74.6MB/s

 

 

 

 

  hadoop各种压缩算法的优缺点简述

  在考虑如何压缩那些将由MapReduce处理的数据时,考虑压缩格式是否支持分割是很重要的。考虑存储在HDFS中的未压缩的文件,其大小为1GB,HDFS的块大小为64MB,所以该文件将被存储为16块,将此文件用作输入的MapReduce作业会创建1个输人分片(split ,也称为“分块”。对于block,我们统一称为“块”。)每个分片都被作为一个独立map任务的输入单独进行处理。

  现在假设。该文件是一个gzip格式的压缩文件,压缩后的大小为1GB。和前面一样,HDFS将此文件存储为16块。然而,针对每一块创建一个分块是没有用的,因为不可能从gzip数据流中的任意点开始读取,map任务也不可能独立于其他分块只读取一个分块中的数据。gzip格式使用DEFLATE来存储压缩过的数据,DEFLATE将数据作为一系列压缩过的块进行存储。问题是,每块的开始没有指定用户在数据流中任意点定位到下一个块的起始位置,而是其自身与数据流同步。因此,gzip不支持分割(块)机制。

  在这种情况下,MapReduce不分割gzip格式的文件,因为它知道输入是gzip压缩格式的(通过文件扩展名得知),而gzip压缩机制不支持分割机制。这样是以牺牲本地化为代价:一个map任务将处理16个HDFS块。大都不是map的本地数据。与此同时,因为map任务少,所以作业分割的粒度不够细,从而导致运行时间变长。

  在我们假设的例子中,如果是一个LZO格式的文件,我们会碰到同样的问题,因为基本压缩格式不为reader提供方法使其与流同步。但是,bzip2格式的压缩文件确实提供了块与块之间的同步标记(一个48位的PI近似值),因此它支持分割机制。

  对于文件的收集,这些问题会稍有不同。ZIP是存档格式,因此它可以将多个文件合并为一个ZIP文件。每个文件单独压缩,所有文档的存储位置存储在ZIP文件的尾部。这个属性表明ZIP文件支持文件边界处分割,每个分片中包括ZIP压缩文件中的一个或多个文件。

  在MapReduce我们应该使用哪种压缩格式

  根据应用的具体情况来决定应该使用哪种压缩格式。就个人而言,更趋向于使用最快的速度压缩,还是使用最优的空间压缩?一般来说,应该尝试不同的策略,并用具有代表性的数据集进行测试,从而找到最佳方法。对于那些大型的、没有边界的文件,如日志文件,有以下选项。

  存储未压缩的文件。

  使用支持分割机制的压缩格式,如bzip2。

  在应用中将文件分割成几个大的数据块,然后使用任何一种支持的压缩格式单独压缩每个数据块(可不用考虑压缩格式是否支持分割)。在这里,需要选择数据块的大小使压缩后的数据块在大小上相当于HDFS的块。

  使用支持压缩和分割的Sequence File(序列文件)。

  对于大型文件,不要对整个文件使用不支持分割的压缩格式,因为这样会损失本地性优势,从而使降低MapReduce应用的性能。

  hadoop支持Splittable压缩lzo

  在hadoop中使用lzo的压缩算法可以减小数据的大小和数据的磁盘读写时间,在HDFS中存储压缩数据,可以使集群能保存更多的数据,延长集群的使用寿命。不仅如此,由于mapreduce作业通常瓶颈都在IO上,存储压缩数据就意味这更少的IO操作,job运行更加的高效。

  但是在hadoop上使用压缩也有两个比较麻烦的地方:第一,有些压缩格式不能被分块,并行的处理,比如gzip。第二,另外的一些压缩格式虽然支持分块处理,但是解压的过程非常的缓慢,使job的瓶颈转移到了cpu上,例如bzip2。

  如果能够拥有一种压缩算法,即能够被分块,并行的处理,速度也非常的快,那就非常的理想。这种方式就是lzo。

  lzo的压缩文件是由许多的小的blocks组成(约256K),使的hadoop的job可以根据block的划分来split job。不仅如此,lzo在设计时就考虑到了效率问题,它的解压速度是gzip的两倍,这就让它能够节省很多的磁盘读写,它的压缩比的不如gzip,大约压缩出来的文件比gzip压缩的大一半,但是这样仍然比没有经过压缩的文件要节省20%-50%的存储空间,这样就可以在效率上大大的提高job执行的速度。

  hadoop下lzo配置文档参考http://www.tech126.com/hadoop-lzo/

  如何在MapReduce中使用压缩

  1.输入的文件的压缩

  如果输入的文件是压缩过的,那么在被MapReduce读取时,它们会被自动解压,根据文件扩展名来决定应该使用哪一个压缩解码器。

  2.MapReduce作业的输出的压缩

  如果要压缩MapReduce作业的输出,请在作业配置文件中将mapred.output.compress属性设置为true。将mapred.output.compression.codec属性设置为自己打算使用的压缩编码/解码器的类名。

  如果为输出使用了一系列文件,可以设置mapred.output.compression.type属性来控制压缩类型,默认为RECORD,它压缩单独的记录。将它改为BLOCK,则可以压缩一组记录。由于它有更好的压缩比,所以推荐使用。

  3.map作业输出结果的压缩

  即使MapReduce应用使用非压缩的数据来读取和写入,我们也可以受益于压缩map阶段的中间输出。因为map作业的输出会被写入磁盘并通过网络传输到reducer节点,所以如果使用LZO之类的快速压缩,能得到更好的性能,因为传输的数据量大大减少了。以下代码显示了启用rnap输出压缩和设置压缩格式的配置属性。

conf.setCompressMapOutput(true);
conf.setMapOutputCompressorClass(GzipCodec.class);

  本地压缩库

  考虑到性能,最好使用一个本地库(native library)来压缩和解压。例如,在一个测试中,使用本地gzip压缩库减少了解压时间50%,压缩时间大约减少了10%(与内置的Java实现相比较)。表4-4展示了Java和本地提供的每个压缩格式的实现。井不是所有的格式都有本地实现(例如bzip2压缩),而另一些则仅有本地实现(例如LZO)。

 

压缩格式 Java实现 本地实现
DEFLATE
gzip
bzip2
LZO

 

 

 

   Hadoop带有预置的32位和64位Linux的本地压缩库,位于库/本地目录。对于其他平台,需要自己编译库,具体请参见Hadoop的维基百科wiki.apache.org/hadoop/NativeHadoop。

  本地库通过Java系统属性java.library.path来使用。Hadoop的脚本在bin目录中已经设置好这个属性,但如果不使用该脚本,则需要在应用中设置属性。

  默认情况下,Hadoop会在它运行的平台上查找本地库,如果发现就自动加载。这意味着不必更改任何配置设置就可以使用本地库。在某些情况下,可能希望禁用本地库,比如在调试压缩相关问题的时候。为此,将属性hadoop.native.lib设置为false,即可确保内置的Java等同内置实现被使用(如果它们可用的话)。

分享到:
评论

相关推荐

    A Survey on Compression Algorithms in Hadoop

    ### Hadoop压缩算法综述 #### 引言 随着信息技术的发展,大数据已成为当前信息技术领域中的一个热点话题。大数据是指在日常生活中产生的数据量极大、种类繁多的数据集合,这些数据可能包括结构化、非结构化或半...

    Hadoop支持下的地理信息大数据处理技术初探.docx

    - **数据压缩**:采用高效的数据压缩算法减少存储空间的需求,同时降低传输成本。 - **数据索引**:建立地理信息数据索引,提高查询效率。 - **数据融合**:整合来自不同来源的地理信息数据,构建统一的数据视图。 -...

    JVM与Hadoop介绍

    这种算法的缺点是会产生内存碎片。 - **复制算法(Copying)**:将可用内存按照容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另一块上面,然后再把已使用过的内存...

    解析Apriori算法python实现

    1. Fp-Growth算法:使用前缀树(Frequent Pattern Tree,简称FP树)来压缩数据,减少数据扫描次数,降低空间复杂度。 2. Eclat算法:基于垂直数据表示,避免了候选项集的生成,提高效率。 3. 分布式计算框架:利用...

    f2.zip_zip

    ZIP格式支持多种压缩算法,并且通常包含一个简短的文件目录,使得用户可以轻松地解压缩和访问压缩包内的文件。 描述中的"Complex clustering function"可能指的是在处理或分析数据时使用的复杂聚类方法。聚类是数据...

    使用CODECs压缩Wave音频.docx

    例如,TrueSpeech CODEC是Win95附带的一种压缩技术,而其他如MP3、AAC等则是常见的高压缩比音频格式,各有优缺点。 总之,使用CODECs压缩Wave音频是提高音频文件的存储效率和网络传输速度的有效手段。开发者需要...

    开源分布式文件系统比较.docx

    Ceph使用Btrfs文件系统,这是一个具备先进特性的文件系统,如Copy-On-Write、数据压缩和快照等功能。然而,Btrfs的使用对操作系统内核版本有一定要求,例如在RHEL5上可能不兼容。此外,虽然Ceph的安装和配置过程可能...

    海量JSON数据的高效处理.pptx

    - 序列化格式包括JSON、BSON和CBOR,各有优缺点。 - 序列化技术有助于提高数据的传输效率和存储空间利用率。 3. **二进制序列化技术**: - 将任意数据结构转换为特定于语言或平台的二进制格式。 - 二进制序列化...

    操作系统学习重点知识整理.zip

    3. **调度算法**:操作系统中涉及到处理器调度,如短作业优先、时间片轮转、先来先服务等,理解各种算法的优缺点及其应用场景。 4. **文件系统**:文件是数据组织的基本单位。学习文件的创建、读写、删除操作,文件...

    大数据环境下的关联规则挖掘

    而FP-Growth算法虽然避免了Apriori算法的多次扫描数据库的缺点,但是在大数据环境下仍然面临着性能问题。 在大数据环境下进行关联规则挖掘时,我们面临两大挑战:时间和空间挑战。当数据量增长到一定程度时,单机...

    大数据技术之hive学习文档

    - **压缩和存储**:Hive 可以配置数据压缩以节省存储空间,支持多种压缩格式如 Gzip 和 Snappy。数据存储方式可以是文本格式、SequenceFile、ORC 或 Parquet 等。 - **企业级优化**:包括分区、桶、优化查询(如 ...

    Data-Intensive Text Processing with MapReduce Jimmy Lin and Chris Dyer

    这些表示法对于不同的图算法有着不同的优缺点。 ##### 5.2 并行广度优先搜索 并行广度优先搜索是一种在MapReduce框架中实现广度优先搜索的方法。通过合理划分任务和优化数据分布,可以在大规模图数据上高效地执行...

    真题-1.zip

    【标题】"真题-1.zip"所对应的资源很可能是某个考试或学习课程的模拟试题集,这样的压缩文件通常包含了多个题目...对于每个知识点,深入学习需要理解其概念、应用场景、优缺点,并通过实践题目来提高理解和应用能力。

    面试题集锦 有各个公司的

    1. **编程语言**:C、C++、Java、Python、JavaScript等语言的基本语法、特性、优缺点及其应用场合。 2. **算法与数据结构**:排序算法(快速排序、归并排序、堆排序等)、查找算法(二分查找、哈希查找等)、常用...

    finaldatarelease2.zip

    理解ZIP压缩算法和如何解压文件,对于日常的数据处理至关重要。 3. 数据加密:在处理敏感数据时,加密是确保数据安全的重要手段。了解如何使用加密工具,如AES,对数据进行加密,可以保护数据免受非法访问。 4. ...

    Files

    压缩可以通过各种算法实现,如ZIP、RAR或7Z格式,这些格式允许用户将多个文件打包成一个压缩包,减少传输时间和存储需求。压缩文件可以通过专门的解压软件,如WinRAR或7-Zip进行解压,恢复原始文件。 文件的权限和...

Global site tag (gtag.js) - Google Analytics