4种常用压缩格式在Hadoop中的应用

  目前在Hadoop中用得比较多的有lzo,gzip,snappy,bzip2这4种压缩格式,笔者根据实践经验介绍一下这4种压缩格式的优缺点和应用场景,以便大家在实践中根据实际情况选择不同的压缩格式。

  1 gzip压缩

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

  缺点:不支持split。

  应用场景:当每个文件压缩之后在130M以内的(1个块大小内),都可以考虑用gzip压缩格式。譬如说一天或者一个小时的日志压缩成一个gzip文件,运行mapreduce程序的时候通过多个gzip文件达到并发。hive程序,streaming程序,和java写的mapreduce程序完全和文本处理一样,压缩之后原来的程序不需要做任何修改。

  2 lzo压缩

  优点:压缩/解压速度也比较快,合理的压缩率;支持split,是hadoop中最流行的压缩格式;支持hadoop native库;可以在linux系统下安装lzop命令,使用方便。

  缺点:压缩率比gzip要低一些;hadoop本身不支持,需要安装;在应用中对lzo格式的文件需要做一些特殊处理(为了支持split需要建索引,还需要指定inputformat为lzo格式)。

  应用场景:一个很大的文本文件,压缩之后还大于200M以上的可以考虑,而且单个文件越大,lzo优点越越明显。

  3 snappy压缩

  优点:高速压缩速度和合理的压缩率;支持hadoop native库。

  缺点:不支持split;压缩率比gzip要低;hadoop本身不支持,需要安装;linux系统下没有对应的命令。

  应用场景:当mapreduce作业的map输出的数据比较大的时候,作为map到reduce的中间数据的压缩格式;或者作为一个mapreduce作业的输出和另外一个mapreduce作业的输入。

  4 bzip2压缩

  优点:支持split;具有很高的压缩率,比gzip压缩率都高;hadoop本身支持,但不支持native;在linux系统下自带bzip2命令,使用方便。

  缺点:压缩/解压速度慢;不支持native。

  应用场景:适合对速度要求不高,但需要较高的压缩率的时候,可以作为mapreduce作业的输出格式;或者输出之后的数据比较大,处理之后的数据需要压缩存档减少磁盘空间并且以后数据用得比较少的情况;或者对单个很大的文本文件想压缩减少">存储空间,同时又需要支持split,而且兼容之前的应用程序(即应用程序不需要修改)的情况。

  最后用一个表格比较上述4种压缩格式的特征(优缺点):

时间: 2024-08-28 12:33:56

4种常用压缩格式在Hadoop中的应用的相关文章

Hadoop文件常用压缩方法的压缩效果比较

对于Hadoop文件常用的几种压缩方法,我写了一个java程序进行比较. 期望是,给出一个大文件(bigfile.txt) ,我们用各种方式压缩他们然后最终复制到HDFS中. 代码很简单:就是构造codec的实例,然后让它来创建到HDFS的输出流 /* */ package com.charles.hadoop.fs; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.InputS

hadoop中使用lzo的压缩

在hadoop中使用lzo的压缩算法可以减小数据的大小和数据的磁盘读写时间,不仅如此,lzo是基于block分块的,这样他就允许数据被分解成chunk,并行的被hadoop处理.这样的特点,就可以让lzo在hadoop上成为一种非常好用的压缩格式. lzo本身不是splitable的,所以当数据为text格式时,用lzo压缩出来的数据当做job的输入是一个文件作为一个map.但是 sequencefile本身是分块的,所以sequencefile格式的文件,再配上lzo的压缩格式,就可实现lzo

Hadoop中的压缩(1) 概述与实例

1 概述 文件压缩主要有两个好处,一是减少了存储文件所占空间,另一个就是为数据传输提速.在hadoop大数据的背景下这两点尤为重要.hadoop里支持很多种压缩格式: DEFLATE是同时使用了LZ77算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法,源代码可以在zlib库中找到.gzip是以DEFLATE算法为基础扩展出来的一种算法. 压缩算法 原始文件大小 压缩后的文件大小 压缩速度 解压缩速度 gzip 8.3GB 1.8GB 17.5MB/s 58MB/s bzip

Android中3种图片压缩处理方法

  这篇文章主要介绍了Android中3种图片压缩处理方法,本文讲解了质量压缩方法.获得缩略图.图片缩放三种方法并分别给出示例代码,需要的朋友可以参考下 Android中图片的存在形式: 1:文件形式:二进制形式存在与硬盘中. 2:流的形式:二进制形式存在与内存中. 3:Bitmap的形式 三种形式的区别: 文件形式和流的形式:对图片体积大小并没有影响.也就是说,如果你手机SD卡上的图片通过流的形式读到内存中,在内存中的大小也是原图的大小. 注意:不是Bitmap的形式. Bitmap的形式:图

Java中几种常用数据类型之间转换的方法

Java中几种常用的数据类型之间转换方法: 1. short-->int 转换 exp: short shortvar=0; int intvar=0; shortvar= (short) intvar 2. int-->short 转换 exp: short shortvar=0; int intvar=0; intvar=shortvar; 3. int->String 转换 exp: int intvar=1; String stringvar; Stringvar=string.

Excel中四种常用类型图表的创建方法

Excel中四种常用类型图表的创建方法   上图中的四种不同类型的图表都是根据同一个表格创建的,也就是说,这四种常用的图表是没有特定的数据限制的. 一.创建柱形图 1.将光标定位到要创建图表的数据区域内,然后切换到"插入"选项卡,在"图表"组的"柱形图"下选择一种需要的柱形图类型进行创建. 2.现在工作表中已经插入了一个选择的柱形图. 二.创建条形图 1.将光标定位到表格区域内,然后选择一个合适的条形图类型进行创建. 2.现在工作表中已经插入了一

想问一下Java中常用的配置文件保存格式。例如:我的程序中可以添加很多FTP的信息,我想问一下这些FTP信息最常用什么格式保存成文件?

问题描述 想问一下Java中常用的配置文件保存格式.例如:我的程序中可以添加很多FTP的信息,我想问一下这些FTP信息最常用什么格式保存成文件? 解决方案 解决方案二:我一般用xml文件来保存,用Properties这个类来读取解决方案三:一般用XML文件吧.我用XML保存,用DOM4J来读写

jQuery中ajax的4种常用请求方式介绍_AJAX相关

AJAX 是一种与服务器交换数据的技术,可以在补充在整个页面的情况下更新网页的一部分. jQuery中ajax的4种常用请求方式: 1.$.ajax()返回其创建的 XMLHttpRequest 对象. $.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数信息.详细参数选项见下. 如果你指定了 dataType 选项,请确保服务器返回正确的 MIME 信息,(如 xml 返回 "text/xml"). 实例: 保存数据到服务器,成功时显示信息. $.aj

Mysql中如何将时间戳转化为常用日期格式

存储时间戳到Mysql数据库,使用转换函数UNIX_TIMESTAMP. PgSQL  代码如下 复制代码 INSERT INTO tbl_name (col1) VALUES(UNIX_TIMESTAMP('2012-11-13 13:54:22')); 1 INSERT INTO tbl_name (col1) VALUES(UNIX_TIMESTAMP('2012-11-13 13:54:22'));  另一个转换函数:FROM_UNIXTIME,就是将时间戳转成常用时间格式 PgSQL