网赢中国专注大数据营销 [会员登录][免费注册][网赢中国下载]我要投稿|加入合伙人|设为首页|收藏|RSS
网赢中国是大数据营销代名词。
大数据营销
当前位置:网赢中国 > 行业资讯 > 技术文章 > 大数据营销技术文章 > Hadoop的压缩算法实例及压缩算法选取-Hadoop
Hadoop的压缩算法实例及压缩算法选取-Hadoop
编辑:翼宇轩 发布时间: 2015-6-8    文章来源:CSDN博客
大数据营销

常见数据压缩算法压缩


文件压缩主要有两个好处,一是减少了存储文件所占空间,另一个就是为数据传输提速。在hadoop大数据的背景下,这两点尤为重要,那么我现在就先来了解下hadoop中的文件压缩。hadoop里支持很多种压缩格式,我们看一个表格:

LZO和LZ4算法已经不在Hadoop1.x中使用了。


1、DEFLATE是同时使用了LZ77与哈夫曼编码的一个无损数据压缩算法,源代码可以在zlib库中找到。gzip是以DEFLATE算法为基础扩展出来的一种算法。
2、压缩算法都是空间和时间的转换,更快压缩时间还是更小的压缩比。可以通过参数来指定,-1意味着速度,-9意味着空间。
拿gzip做个例子,下面就意味着更快速的压缩:gzip -1 file
3、gzip在时间和空间上的比较适中,bzip2压缩比gzip更有效,但是速度更慢。bzip2的解压速度比它的压缩速度要快。但是和其他压缩格式相比又是最慢的,但是压缩效果明显是最好的。snappy和LZ4的解压速度比LZO好很多。
4、splittable表示压缩格式是否可以被分割,也就是说是否支持随机读。压缩数据是否能被mapreduce使用,压缩数据是否能被分割就很关键了。
目前在Hadoop中用得比较多的有lzo,gzip,snappy,bzip2这4种压缩格式。下面是4种压缩格式的特征的比较


Codec实现类


org.apache.hadoop.io.compress
CompressionCodec是压缩和解压缩的接口。以下是该接口的实现类。


CompressionCodec方法
CompressionCodec有两个方法用来压缩和解压
压缩:通过createOutputStream(OutputStream out)方法获得CompressionOutputStream对象
解压:通过createlnputStream(InputStream in)方法获得Compressionlnputstream对象


编写下面的例子进行比较
dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。


拷贝生成一个512M的文件
[root@master liguodong]# dd if=/dev/zero of=data bs=1024k count=512
记录了512+0 的读入
记录了512+0 的写出
536870912字节(537 MB)已复制,0.557151 秒,964 MB/秒
[root@master liguodong]# ll data
-rw-r--r-- 1 root root 536870912 6月 5 19:11 data
[root@master liguodong]# pwd
/liguodong
[root@master liguodong]# ls
codec.jar data dir jni


  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11


package Compress;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.compress.CompressionCodec;
import org.apache.hadoop.io.compress.CompressionOutputStream;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.util.ReflectionUtils;
public class Test {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//1、配置
Configuration configuration = new Configuration();
Job job = Job.getInstance(configuration, 'Codec');
//2、打包运行必须执行的方法
job.setJarByClass(Test.class);
//String codecClassName = 'org.apache.hadoop.io.compress.BZip2Codec';
String codecClassName = 'org.apache.hadoop.io.compress.GzipCodec';
Class<?> clsClass = Class.forName(codecClassName);
CompressionCodec codec = (CompressionCodec)
ReflectionUtils.newInstance(clsClass, configuration);
String inputFile = '/liguodong/data';
String outFile = inputFile + codec.getDefaultExtension();//获得默认扩展名
FileOutputStream fileOut = new FileOutputStream(outFile);
CompressionOutputStream out = codec.createOutputStream(fileOut);
FileInputStream in = new FileInputStream(inputFile);
IOUtils.copyBytes(in, out, 4096 ,false);
in.close();
out.close();
}
}


  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

  • 28

  • 29

  • 30

  • 31

  • 32

  • 33

  • 34

  • 35

  • 36

  • 37

  • 38

  • 39

  • 40

  • 41


打成jar包:codec.jar
运行


[root@master liguodong]# yarn jar codec.jar
15/06/05 19:48:04 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
[root@master liguodong]# ls
codec.jar data data.bz2 data.gz dir gzipcodec.jar jni
比较
[root@master liguodong]# ll
总用量 524824
-rw-r--r-- 1 root root 536870912 65 19:11 data
-rw-r--r-- 1 root root 402 65 19:48 data.bz2
-rw-r--r-- 1 root root 521844 65 20:17 data.gz


  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10


怎么选择压缩算法?


1、用一些包含了压缩并且支持splittable的文件格式,比如SequenceFile,RCFile或者Avro文件。
2、使用提供splittable的压缩格式,比如,bzip2和索引后可以支持splittable的lzo。
3、提前把文件分成几个块,每个块单独压缩,这样就无需考虑splittable的问题了。
4、不要压缩文件,以不支持splittable的压缩格式存储一个很大的数据文件是不合适的,非本地处理效率会非常之低。


大数据营销
编辑推荐
图片行业资讯
  • 雷军隔空喊话董明珠:格力 小米欢迎你
  • 杨元庆:Moto在华上市一周预定量超100万
  • 小米洪锋谈O2O布局:做商城不做具体服务
  • 盖茨向不知名实体捐赠15亿美元微软股票 持股降至3%
  • 刘强东:允许我获取数据 冰箱免费送给你
营销资讯搜索
大数据营销
推荐工具
    热点关注
    大数据营销
    大数据营销
    大数据营销
    大数据营销
     

    大数据营销之企业名录

    网络营销之邮件营销

    大数据营销之搜索采集系列

    大数据营销之QQ号采集

    大数据营销之QQ精准营销

    大数据营销之QQ消息群发

    大数据营销之空间助手

    大数据营销之QQ联盟

    大数据营销之QQ群助手
     
    设为首页 | 营销资讯 | 营销学院 | 营销宝典 | 本站动态 | 关于网赢中国 | 网站地图 | 网站RSS | 友情链接
    本站网络实名:网赢中国  国际域名:www.softav.com  版权所有 2004-2015  深圳爱网赢科技有限公司
    邮箱:web@softav.com 电话:+86-755-26010839(十八线) 传真:+86-755-26010838
    在线咨询:点击这里给我发消息 点击这里给我发消息 点击这里给我发消息  点击这里给我发消息  点击这里给我发消息

    深圳网络警
    察报警平台
    公共信息安
    全网络监察
    经营性网站
    备案信息
    不良信息
    举报中心
    中国文明网
    传播文明
    分享