• 压缩


    压缩好处:减少储存文件所需空间,还可以降低其在网络上传输的时间。

      压缩算法对比

    算法    原始文件大小      压缩后文件大小  压缩速度    解压缩速度

    Gzip          8.3G           1.8G           17.5MB/s      58MB/s

    Bzip2        8.3G      1.1G            2.4MB/s       9.5MB/s

    LZO-bset  8.3G           2G               4MB/s       60.6MB/s

    LZO          8.3G           2.9G            49.3MB/s     74.6MB/s

      Bzip2支持切分 splitting.hdfs上文件1GB,如按照默认块64MB,那么这个文件被分为16个块。如果把这个块放入MR任务 ,将有16map任务输入。如果算法不支持切分,后果是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,通过CodecPoolgetCompressor方法获得Compressor对象,需要传入Codec 。这样可以节省创建Codec对象开销 ,允许反复使用。

    3.如何选择压缩格式

    a.Gzip优点是压缩率高,速度快。Hadoop支持与直接处理文本一样。缺点不支持split,当文件压缩在128m内,都可以用gzip.

    b.Izo优点压缩速度快,合理的压缩率;支持split,是最流行的压缩格式。支持native库;缺点 比gzip压缩率低,hadoop本身不支持,需要安装;在应用中对lzo格式文件需要处理如 指定inputformatlzo格式.

    c.Snappy压缩 高速压缩率合理支持本地库。不支持splithadoop不支持 要安装linux没有对应命令;当MR输出数据较大,作为到reduce数据压缩格式.

    d.Bzip2 支持split,很高的压缩率,比gzip高,hadoop支持但不支持nativelinux自带命令使用方便。缺点压缩解压速度慢.

      使用哪种压缩和具体应用有关,对于巨大,没有储存边界的文件如日志可以考虑:

        储存不压缩的文件

        使用支持切分的储存格式 bzip2

        在应用中切分,然后压缩,需要选择合理数据块的大小,以确定压缩后的块大小

        使用顺序文件SF,支持压缩和切分

        使用Avro数据文件,支持压缩切分并增加了编程语言可读写的优势对于大文件,不应该使用不支持切分的压缩格式,否则失去本地性,造成MR应用效率低下

  • 相关阅读:
    提高github下载速度
    小程序兼容问题
    求斐波拉契数列第n位算法优化
    并发编程:ThreadLocal
    MySQL:常见面试题
    2.1语法基础_表达式目录树(EF底层原理的实现)
    ajax发送post请求:
    投资是普通人摆脱阶层固化的唯一靠谱方式
    人脸识别之Python基于OpenCV
    搜索算法“一二”基于VSCode平台C#语言
  • 原文地址:https://www.cnblogs.com/luminous1/p/8361055.html
Copyright © 2020-2023  润新知