2019独角兽企业重金招聘Python工程师标准>>>

先说明SequnceFile的压缩类型(Compression Type)分为三种NONE,RECORD,BLOCK,通过配置项io.seqfile.compression.type指定:

NONE, Do not compress records  即不压缩

RECORD, Compress values only, each separately.   每条记录都对value进行一次压缩

BLOCK, Compress sequences of records together in blocks.   块压缩,当缓存的key和value字节大小达到指定的阈值,则进行压缩,阈值由配置项io.seqfile.compress.blocksize指定,默认值为1000000字节

RECORD,BLOCK使用的压缩算法是由创建SequnceFile.Writer 时指定的CompressionOption决定的, CompressionOption中CompressionCodec codec属性即为压缩编码器,  不指定时默认为org.apache.hadoop.io.compress.DefaultCodec 对应的底层压缩库为zlib, 除了DefaultCodec还有几个其他的CompressionCodec:GzipCodec  Lz4Codec  SnappyCodec   BZip2Codec 这里不做比较

DefaultCodec在实现zlib压缩的时候,可以指定使用libhadoop.so(hadoop 框架提供的native库)或java.util.zip库。下面了解下如何开启hadoop native库或java zip库:

SequnceFile 默认使用的是org.apache.hadoop.io.compress.DefaultCodec 压缩方式,使用的是Deflate的压缩算法

DefaultCodec在创建压缩器时会执行类ZlibFactory.getZlibCompressor(conf)方法,实现代码片段:

    return (isNativeZlibLoaded(conf)) ?new ZlibCompressor(conf) :new BuiltInZlibDeflater(ZlibFactory.getCompressionLevel(conf).compressionLevel());

当加载本地Zlib库时,使用的是ZlibCompressor压缩器类,否则使用BuiltInZlibDeflater类,BuiltInZlibDeflater类是调用java的java.util.zip.Inflater类实现;

其中isNativeZlibLoaded是根据NativeCodeLoader类是否已经加载hadoop native库来判断的,代码如下:

// Try to load native hadoop library and set fallback flag appropriatelyif(LOG.isDebugEnabled()) {LOG.debug("Trying to load the custom-built native-hadoop library...");}try {System.loadLibrary("hadoop");LOG.debug("Loaded the native-hadoop library");nativeCodeLoaded = true;} catch (Throwable t) {// Ignore failure to loadif(LOG.isDebugEnabled()) {LOG.debug("Failed to load native-hadoop with error: " + t);LOG.debug("java.library.path=" +System.getProperty("java.library.path"));}}if (!nativeCodeLoaded) {LOG.warn("Unable to load native-hadoop library for your platform... " +"using builtin-java classes where applicable");}

其中System.loadLibrary("hadoop"); 在linux上查找的就是libhadoop.so。

总结:当无法加载本地的hadoop库,hadoop会使用java.util.zip.Inflater类来对SequnceFile进行压缩;当可以加载到本地hadoop库,则使用本地的库。

下面来比较实用native hadoop库和不使用native hadoop的性能区别。

不使用native hadoop即在jvm运行参数java.library.path中不包含native库的路径:

java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib

使用则在后面加上hadoop的native库路径:

java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib:$HADOOP_HOME/lib/native

虚拟机集群:

50w 数据,sequnceFile压缩模式为RECORD, key为随机的10字节,value为随机200字节:

native lib disabled:    32689ms         after compression 114.07 MB

native lib enabled:   30625ms        after compression 114.07 MB

50w 数据,sequnceFile压缩模式为BLOCK, key为随机的10字节,value为随机200字节:

native lib disabled:   11354ms       after compression 101.17 MB

native lib enabled:    10699ms       after compression 101.17 MB

物理机集群:

50w 数据,sequnceFile压缩模式为RECORD, key为随机的10字节,value为随机200字节:

native lib disabled:    21953ms         after compression 114.07 MB

native lib enabled:   24742ms        after compression 114.07 MB

100w 数据,sequnceFile压缩模式为RECORD, key为随机的10字节,value为随机200字节:

native lib disabled:    48555ms         after compression 228.14 MB

native lib enabled:   45770ms        after compression 228.14 MB

100w 数据,sequnceFile压缩模式为RECORD, key为随机的10字节,value为随机200字节, 设置zlib压缩级别为BEST_SPEED:

native lib disabled:    44872ms         after compression 228.14 MB

native lib enabled:  51582ms        after compression 228.14 MB

100w 数据,sequnceFile压缩模式为BLOCK, key为随机的10字节,value为随机200字节, 设置zlib压缩级别为BEST_SPEED:

native lib disabled:    14374ms         after compression  203.54 MB

native lib enabled:  14639ms        after compression   203.54 MB

100w 数据,sequnceFile压缩模式为BLOCK, key为随机的10字节,value为随机200字节, 设置zlib压缩级别为DEFAULT_COMPRESSION:

native lib disabled:    15397ms         after compression  203.54 MB

native lib enabled:  13669ms        after compression   203.54 MB

分析测试结果,总结如下:

当在不同的压缩模式,或不同的数据量,以及不同的zlib压缩级别时,使用hadoop native库压缩和使用java zip库之间没有太大差别

后续再尝试其他的native压缩编码方式: GzipCodec  Lz4Codec  SnappyCodec   BZip2Codec

转载于:https://my.oschina.net/shipley/blog/498712

Hadoop SequnceFile.Writer 压缩模式及压缩库浅析相关推荐

  1. 11g 日志传输压缩模式

    [20181112]11g 日志传输压缩模式.txt --//由于主备库不在一个局域网内,一样采用级联模式,先传输日志到一台主机,然后在由这台备库传输日志到远端的dataguard备库. --//这样 ...

  2. Hadoop所支持的几种压缩格式

    1 gzip压缩 优点:压缩率比较高,而且压缩/解压速度也比较快:hadoop本身支持,在应用中处理gzip格式的文件就和直接处理文本一样:有hadoop native库:大部分linux系统都自带g ...

  3. Zlib压缩库压缩比率和压缩性能测试 (1)

    Zlib1.2.6库是Jean-loup Gailly 和Mark Adler开发的压缩函数库,基于LZ77(Ziv, Jacob, and Abraham Lempel. "A unive ...

  4. MyZip pro专业极速解压放弃了Mac上落后的拖拽解压压缩模式,采用『右键菜单』进行压缩、解压,极大的符合了用户最初的使用习惯。

    1.右键压缩解压 首先,MyZip放弃了Mac上落后的拖拽解压压缩模式,采用『右键菜单』进行压缩.解压,极大的符合了用户最初的使用习惯. 2.多线程极速压缩 很多时候,我们在Mac上压缩总感觉很慢,7 ...

  5. Hadoop集群中添加Snappy解压缩库

    Snappy是用C++开发的压缩和解压缩开发包,旨在提供高速压缩速度和合理的压缩率.Snappy比zlib更快,但文件相对要大20%到100%.在64位模式的Core i7处理器上,可达每秒250~5 ...

  6. 【Android 内存优化】Android 工程中使用 libjpeg-turbo 压缩图片 ( 初始化压缩对象 | 打开文件 | 设置压缩参数 | 写入压缩图像数据 | 完成压缩 | 释放资源 )

    文章目录 一.使用 libjpeg-turbo 压缩图片流程 二.初始化 JPEG 压缩对象 三.打开文件 四.设置压缩参数 五.开始压缩 六.循环写入压缩数据 七.完成图片压缩及收尾 八.libjp ...

  7. 从Hadoop框架与MapReduce模式中谈海量数据处理(含淘宝技术架构)

    从hadoop框架与MapReduce模式中谈海量数据处理 前言 几周前,当我最初听到,以致后来初次接触Hadoop与MapReduce这两个东西,我便稍显兴奋,觉得它们很是神秘,而神秘的东西常能勾起 ...

  8. Android图片压缩(质量压缩和尺寸压缩)

    在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩):质量压缩一般可用于上传大图前的处理,这样就可以节省一定的流量,毕竟现在的手 ...

  9. 【Android 内存优化】Android 原生 API 图片压缩原理 ( 图片质量压缩方法 | 查找 Java 源码中的 native 方法对应的 C++ 源码 )

    文章目录 一. 图片质量压缩方法 二. 查找对应的 Native 方法源码 三. 分析 Bitmap.cpp 中动态注册 Native 方法 在博客 [Android 内存优化]图片文件压缩 ( An ...

最新文章

  1. JQ 全选后获取选中的值_为什么在PBI中还需要切片器之三:Excel切片器之度量值切换...
  2. python百度网盘-bypy-百度网盘Python客户端 linux
  3. 考研常识:研究生单独考试是什么意思?
  4. 二维树状数组模板(区间修改+区间查询)
  5. 2017.8.23创业项目方向
  6. 【CF#801 A.】 Vicious Keyboard(字符串查找,水题)
  7. 原始Dao开发方法以及存在的问题
  8. vmware下ubuntu重启后不能上网
  9. 27 MM配置-采购-采购申请-定义凭证层的屏幕格式
  10. android不是内部或外部命令,也不是可执行的程序或批处理文件
  11. vsflexgrid 最后一行 求和_合并单元格求和、计数、平均值,这个方法很实用
  12. nginx服务器带宽_如何设置服务器的带宽?
  13. Web开发编程语言是最适合新手的吗-开课吧
  14. C++ 练习题(二)计算机存储和数字系统介绍
  15. php7 switch,Switch autocommit on or off - PHP 7 中文文档
  16. GJB 150.10军用设备环境试验方法霉菌试验
  17. 七上八下猜数字_《脑筋急转弯》
  18. idea svn update 时不弹出选择分支的对话框,don't show this dialog in the furture解决方案
  19. 高德地图marker事件监听-高德地图marker绑定事件就执行了[解决立即执行]
  20. Hadoop3x,Hadoop2x新特性

热门文章

  1. php引用数据库实例,PHP单例模式实例,连接数据库对类的引用
  2. hdu3415单调队列
  3. 【数字信号处理】傅里叶变换性质 ( 序列傅里叶变换共轭对称性质示例 )
  4. 【数字信号处理】LTI 系统因果性与稳定性示例 ( 示例一 | 示例二 )
  5. 【Android 逆向】Android 系统文件分析 ( /proc/pid 进程号对应进程目录 | oom_adj | maps | smaps | mem | task | environ )
  6. 【Android 逆向】Android 系统文件分析 ( Android 系统 root 环境准备 | 查看 Android 根目录信息 )
  7. 【开发环境】Mac 中安装 Python3 最新版本 ( 下载 Python 最新版本 | 安装 Python3 | 验证 Python3 )
  8. 【Java 网络编程】网络相关概念
  9. 【JavaEE WEB 开发】Tomcat 详解 Servlet 入门
  10. 【Android 应用开发】BluetoothDevice详解