zoukankan      html  css  js  c++  java
  • Hadoop IO操作之压缩

    减少储存文件所需空间,还可以降低其在网络上传输的时间。
    压缩算法对比
     
    算法    原始文件大小      压缩后文件大小  压缩速度    解压缩速度
    Gzip               8.3G       1.8G                     17.5MB/s      58MB/s
    Bzip2                             1.1                        2.4MB/s       9.5MB/s
    LZO-bset                        2                         4MB/s          60.6MB/s
    LZO                                2.9                       49.3MB/s     74.6MB/s
     
    Bzip2支持切分 splitting.hdfs上文件1GB,如按照默认块64MB,那么这个文件被分为16个块。如果把这个块放入MR任务 ,将有16个map任务输入。如果算法不支持切分,后果是MR把这个文件作为一个Map输入。这样任务减少了,降低了数据的本地性。
    1.CodeC
      实现了一种压缩解压算法。Hadoop中压缩解压类实现CompressionCodec接口createOutputStream来创建一个CompressionOutputStream,将其压缩格式写入底层的流演示HDFS上一个1.bzip2算法压缩的文件解压,然后把解压的文件压缩成2.gz。
    2.本地库
      Hadoop使用java开发,但是有些需求和操作并不适合java,所以引入了本地库 native。可以高效执行某些操作。如使用gzip压缩解压时,使用本地库比使用java时间要缩短大约10%,解压达到50%。在hadoop_home/lib/native下
    在hadoop配置文件core-site.xml可以设置是否使用native
    <property>
    <name>Hadoop.native.lib
    <value>true
    </property>
      默认是启用本地库,如果频繁使用原生库做压解压任务,可以使用codecpool,通过CodecPool的getCompressor方法获得Compressor对象,需要传入Codec 。这样可以节省创建Codec对象开销 ,允许反复使用。
    使用哪种压缩和具体应用有关,对于巨大,没有储存边界的文件如日志 可以考虑:
      ·储存不压缩的文件
        ·使用支持切分的储存格式 bzip2

      ·在应用中切分,然后压缩,需要选择合理数据块的大小,以确定压缩后的块大小
      ·使用顺序文件SF,支持压缩和切分
      ·使用Avro数据文件,支持压缩切分并增加了编程语言可读写的优势对于大文件,不应该使用不支持切分的压缩格式,否则失去本地性,造成MR应用效率低下。




  • 相关阅读:
    Deep learning:三十八(Stacked CNN简单介绍)
    机器学习&数据挖掘笔记_11(高斯过程回归)
    Deep learning:三十九(ICA模型练习)
    机器学习&数据挖掘笔记_9(一些svm基础知识)
    机器学习&数据挖掘笔记_10(高斯过程简单理解)
    本人部分博客导航(ing...)
    算法设计和数据结构学习_3(《数据结构和问题求解》part2笔记)
    Deep learning:三十七(Deep learning中的优化方法)
    C++笔记(2):《数据结构和问题求解》part1笔记
    算法设计和数据结构学习_4(《数据结构和问题求解》part4笔记)
  • 原文地址:https://www.cnblogs.com/1iHu4D0n9/p/8361201.html
Copyright © 2011-2022 走看看