文档章节

hadoop 压缩框架

政委007
 政委007
发布于 2017/05/03 09:21
字数 864
阅读 36
收藏 1

hadoop 压缩框架

[toc]

hadoop 常见的压缩

| 格式 | split | native |压缩率 |速度 | 是否hadoop自带 |linux命令 | 换成压缩格式后,原来的应用程序是否要修改 | | :-------- | :--------:| :------: |:--------:| :------: |:--------:| :------: | |gzip | 否| 是 |很高| 比较快| 是,直接使用| 有 |和文本处理一样,不需要修改| |lzo| 是|是 |比较高 |很快| 否,需要安装 |有| 需要建索引,还需要指定输入格式| |snappy|否| 是 |比较高 |很快| 否,需要安装| 没有| 和文本处理一样,不需要修改| |bzip2 |是 |否 |最高 |慢 | 是,直接使用 |有 |和文本处理一样,不需要修改|

压缩使用例子

public class CompressTest {
	public static void main(String[] args) throws Exception {
	    //要压缩的文件
		String name = "/Users/zwf/Downloads/BEH 7.0产品介绍-20161226.pptx";
		/**
		* 指定压缩方式可用的有:
		* 1. org.apache.hadoop.io.compress.DefaultCodec
		* 2. org.apache.hadoop.io.compress.GzipCodec
		* 3. org.apache.hadoop.io.compress.Bzip2Codec
		* 4. org.apache.hadoop.io.compress.LzopCodec
		* 5. org.apache.hadoop.io.compress.SnappyCodec
		**/
		compress("org.apache.hadoop.io.compress.DefaultCodec", name);
		decompress(name+".deflate");
	}
	//压缩过程
	public static void compress(String method ,String filename) throws Exception {

		File inFile = new File(filename);
		System.out.println(inFile.getTotalSpace());
		InputStream in = new FileInputStream(inFile);
		Configuration conf = new Configuration();
		//加载类,反射获取实例
		CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(Class.forName(method), conf);
		File outFile = new File(filename + codec.getDefaultExtension());
		CompressionOutputStream cout = codec.createOutputStream(new FileOutputStream(outFile));
		IOUtils.copyBytes(in,cout,1000,false);
		in.close();
		cout.close();
		System.out.println(outFile.getTotalSpace()/1024/1024);
	}
	//解压缩过程
	public static void decompress(String filename) throws Exception {
		
		File inFile = new File(filename);
		CompressionCodecFactory factory = new CompressionCodecFactory(new Configuration());
		//根据文件名后缀获取对应的压缩方式
		CompressionCodec codec = factory.getCodec(new Path(filename));
		if(codec == null) {
			System.out.println("connot found codec for file " + filename);
			return;
		}
		InputStream in = codec.createInputStream(new FileInputStream(inFile));
		File outFile = new File(filename + ".txt");
		OutputStream out = new FileOutputStream(outFile);
		IOUtils.copyBytes(in,out,1000,false);
		in.close();
		out.close();
		
		System.out.println(outFile.getTotalSpace()/1024/1024);
	}
	
}

主要类

CompressionCodec

主要功能: 定义了压缩,和解压缩调用的方法 主要实现: Lz4Codec ,GzipCodec,SnappyCodec ,BZip2Codec等 主要方法:

    // 在底层输出流 out 的基础上创建 对应压缩算法的压缩流 CompressionOutputStream  象
    CompressionOutputStream createOutputStream(OutputStream out) throws IOException;
    CompressionOutputStream createOutputStream(OutputStream out, Compressor compressor) throws IOException;
    //获取本地压缩是否可用,返回压缩实现类
    Class<? extends Compressor> getCompressorType()
    Class<? extends Decompressor> getDecompressorType()
    //获取解压缩使用的输入流
    CompressionInputStream createInputStream(InputStream in) throws IOException;
    CompressionInputStream createInputStream(InputStream in,  Decompressor decompressor) throws IOException;
    // 创建压缩算法对应的压缩器
    Compressor createCompressor();
    Decompressor createDecompressor();
    //获取压缩算法对应的文件名后缀
    String getDefaultExtension();

CompressionCodecFactory

主要功能: CompressionCodec 的工厂,构造函数中初始化了一下存储现有压缩算法的实例,主要保存了

    {
       2zb.: org.apache.hadoop.io.compress.BZip2Codec,
       etalfed.: org.apache.hadoop.io.compress.DeflateCodec,
       yppans.: org.apache.hadoop.io.compress.SnappyCodec,
       zg.: org.apache.hadoop.io.compress.GzipCodec
    }

Compressor

主要功能:定义了压缩使用的接口方法, 提供数据压缩功能。不同压缩都有对应的实现 主要方法:

    //把数据放到压缩其中, off 指定从数字b的开始位置, len指定读取数据长度
    public void setInput(byte[] b, int off, int len);
    //判断压缩器是否能继续输入,如果不能表示需要开始压缩数据,
    public boolean needsInput();

    public void setDictionary(byte[] b, int off, int len);
    //返回已经压缩了的数据压缩前长度
    public long getBytesRead();
    
    //返回已经压缩了的数据压缩后长度
    public long getBytesWritten();
    //结束数据输入的过程
    public void finish();
   //判断压缩器中是否还有未压缩数据
    public boolean finished();
    //开始压缩数据
    public int compress(byte[] b, int off, int len) throws IOException;
    //重置压缩器
    public void reset();
   //关闭压缩器
    public void end();
    //方法更进一步允许使用 Hadoop 的配置系统, 重置并重新配置压缩 。
    public void reinit(Configuration conf);

抽象类CompressionOutputStream

主要作用: 定义压缩输出流的接口

CompressorStream

主要作用:持有一个压缩器Compressor,实现了CompressionOutputStream类。提供数据压缩功能。
客户端压缩流程 压缩器内部

© 著作权归作者所有

政委007
粉丝 10
博文 15
码字总数 15843
作品 0
洛阳
程序员
私信 提问
Parquet 支持数据嵌套的列式数据存储格式

简介 Apache Parquet 是一个列存储格式,主要用于 Hadoop 生态系统。对数据处理框架、数据模型和编程语言无关。Cloudera的大数据在线分析(OLAP)项目Impala中使用该格式作为列存储。 Parque...

cloud-coder
2015/06/17
3.1K
0
Hadoop SequnceFile.Writer 压缩模式及压缩库浅析

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

囚兔
2015/08/28
168
0
SequenceFile介绍(转)

理解点: 1、二进制数据格式,在hadoop上进行mr任务时使用,一般是中间过程mr的输入输出数据 2、有一定的格式:头部+内容。头部标示SEQ 3、可通过read读取, ${JAVAHOME}/bin/java -cp ${HAD...

Zero零_度
2016/07/06
43
0
《Hadoop权威指南》读书简记

第一章:就是介绍一下Hadoop的历史及发展过程。 第二章:MapReduce 从一个统计气象学的例子,来引出MapReduce的写法,对比了一下新旧API的区别以及不同。新的API主要采用的是虚类而不是接口的...

牧师-Panda
2016/11/27
30
0
Apache Hadoop 的最佳实践和反模式

Apache Hadoop是一个用来构建大规模共享存储和计算设施的软件。Hadoop集群已经应用在多种研究和开发项目中,并且,Yahoo!, EBay, Facebook, LinkedIn, Twitter等公司,越来越多的的把它应用在...

可观
2013/01/12
6.3K
4

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
昨天
64
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
昨天
26
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
昨天
44
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
昨天
27
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
昨天
44
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部