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

对于Hadoop文件常用的几种压缩方法,我写了一个java程序进行比较。

期望是,给出一个大文件(bigfile.txt) ,我们用各种方式压缩他们然后最终复制到HDFS中。

代码很简单:就是构造codec的实例,然后让它来创建到HDFS的输出流

/*
 */
package com.charles.hadoop.fs; 

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI; 

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.compress.CompressionCodec;
import org.apache.hadoop.io.compress.CompressionCodecFactory;
import org.apache.hadoop.io.compress.GzipCodec;
import org.apache.hadoop.util.ReflectionUtils; 

/**
 *
 * Description:
 *
 * @author charles.wang
 * @created May 26, 2012 3:23:21 PM
 *
 */
public class HadoopCodec { 

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub 

        String inputFile = "bigfile.txt"; 

        String outputFolder = "hdfs://192.168.129.35:9000/user/hadoop-user/codec/";
        // String outputFile="bigfile.gz"; 

        // 读取hadoop文件系统的配置
        Configuration conf = new Configuration();
        conf.set("hadoop.job.ugi", "hadoop-user,hadoop-user"); 

        //测试各种压缩格式的效率
        //gzip
        long gzipTime = copyAndZipFile(conf, inputFile, outputFolder, "org.apache.hadoop.io.compress.GzipCodec", "gz");
        //bzip2
        long bzip2Time = copyAndZipFile(conf, inputFile, outputFolder, "org.apache.hadoop.io.compress.BZip2Codec", "bz2");
        //deflate
        long deflateTime = copyAndZipFile(conf, inputFile, outputFolder, "org.apache.hadoop.io.compress.DefaultCodec", "deflate"); 

        System.out.println("被压缩的文件名为: "+inputFile);
        System.out.println("使用gzip压缩,时间为: "+gzipTime+"毫秒!");
        System.out.println("使用bzip2压缩,时间为: "+bzip2Time+"毫秒!");
        System.out.println("使用deflate压缩,时间为: "+deflateTime+"毫秒!");
    } 

    public static long copyAndZipFile(Configuration conf, String inputFile, String outputFolder, String codecClassName,
            String suffixName) throws Exception {
        long startTime = System.currentTimeMillis(); 

        // 因为本地文件系统是基于java.io包的,所以我们创建一个本地文件输入流
        InputStream in = new BufferedInputStream(new FileInputStream(inputFile)); 

        //去掉扩展名提取basename
        String baseName = inputFile.substring(0, inputFile.indexOf("."));
        //构造输出文件名,它是路径名+基本名+扩展名
        String outputFile = outputFolder + baseName + "."+suffixName; 

        FileSystem fs = FileSystem.get(URI.create(outputFile), conf); 

        // 创建一个编码解码器,通过反射机制根据传入的类名来动态生成其实例
        CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(Class.forName(codecClassName), conf); 

        // 创建一个指向HDFS目标文件的压缩文件输出流
        OutputStream out = codec.createOutputStream(fs.create(new Path(outputFile)));
        // 用IOUtils工具将文件从本地文件系统复制到HDFS目标文件中 

        try {
            IOUtils.copyBytes(in, out, conf); 

        } finally {
            IOUtils.closeStream(in);
            IOUtils.closeStream(out);
        } 

        long endTime = System.currentTimeMillis(); 

        return endTime - startTime;
    } 

}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索hadoop
, string
, 文件
, apache
, import
, java 实现生成txt压缩
inputfile
压缩语段的常用方法、hadoop 压缩、hadoop 压缩格式、hadoop 压缩命令、hadoop 压缩文件,以便于您获取更多的相关知识。

时间: 2024-08-19 22:33:12

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

Android图片压缩方法并压缩到指定大小

一.图片质量压缩 /** * 质量压缩方法 * @param image * @return */ public static Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中

Hadoop文件压缩

文件压缩主要有两个好处,一是减少了存储文件所占空间,另一个就是为数据传输提速.在hadoop大数据的背景下,这两点尤为重要,那么我现在就先来了解下hadoop中的文件压缩. hadoop里支持很多种压缩格式,我们看一个表格: DEFLATE是同时使用了LZ77算法与哈夫曼编码(Huffman http://www.aliyun.com/zixun/aggregation/1552.html">Coding)的一个无损数据压缩算法,源代码可以在zlib库中找到.gzip是以DEFLATE算法

php打包压缩文件之ZipArchive方法用法分析_php技巧

本文实例讲述了php打包压缩文件之ZipArchive方法用法.分享给大家供大家参考,具体如下: 前面说到了php打包压缩文件之PclZip方法,今天来说下另一种更为简单的方法,使用ZipArchive来压缩文件.这个是php的扩展类,自php5.2版本以后就已经支持这个扩展,如果你在使用的时候出现错误,查看下php.ini里面的extension=php_zip.dll前面的分号有没有去掉,然后再重启Apache这样才能使用这个类库. 使用ZipArchive压缩文件是非常简单的,php官网已

WinXP系统安装direct9.0时提示不能信任一个安装所需的压缩文件的解决方法

随着科技的发展,系统的升级越来越快,可是人们刚开始使用的xp系统已经习惯,升级的系统并不习惯,所以一些用户还是在使用着xp系统.最近,用户在安装direct9.0时,提示不能信任一个安装所需的压缩文件,应该如何解决呢?那现在就跟小编一起去看看WinXP系统安装direct9.0时提示不能信任一个安装所需的压缩文件的解决方法! 解决办法: 一. 首先大家先解压下载下来的软件压缩包,进行解压完之后,找到解压出来的软件,鼠标右键"以管理员方式"安装这个软件. 二. 假如大家是在安装游戏过程中

U盘文件高级压缩方法

  U盘又装满文件了?别急,教你一招让你的U盘装得更多一点. 如果将目标内容保存到U盘之前,先对其进行压缩操作,之后再将它保存到U盘中的话,就能间接地达到为U盘扩容的目的;为此,我们可以按照如下步骤,让U盘自动在保存文件之前先对其进行压缩操作: 首先在系统桌面上创建一个新的压缩文件,并将该文件取名为"U盘压缩器",再将该压缩文件直接拖放到U盘的根目录下面; 其次打开系统资源管理器窗口,逐一展开"X:Documents and SettingsuserSendto"子

在IIS上启用Gzip压缩详细方法(HTTP压缩)_win服务器

一.摘要 本文总结了如何为使用IIS托管的网站启用Gzip压缩, 从而减少网页网络传输大小, 提高用户显示页面的速度. 二.前言. 本文的知识点是从互联网收集整理, 主要来源于中文wiki. 使用YSlow检测网站启用了哪些优化时, Gzip是十分关键的一项. 启动Gip压缩将立竿见影的减少页面的网络传输大小. 三.HTTP压缩概述 HTTP压缩是在Web服务器和浏览器间传输压缩文本内容的方法.HTTP压缩采用通用的压缩算法如gzip等压缩HTML.JavaScript或CSS文件.压缩的最大好

破解重要-破解压缩文件,匆匆忘了压缩密码了

问题描述 破解压缩文件,匆匆忘了压缩密码了 请问大神们该怎么破解压缩文件,我忘了压缩密码了,里面的文件对我很重要 解决方案 如果是WinRAR,那么很不幸,它使用了AES256作为加密算法,如果你忘记了密码,那么只能暴力猜举,按照现在PC的运行速度,基本上6位以上的密码由于猜举的时间超过你可以忍受的极限,所以无法破解. 但是因为你是忘记了密码,而不是破解别人的密码,所以如果你能大致回忆起密码中间的几位,或者确定用到/没用到某个字符,或者你能回想起几个自己常用的组合,那么结合破解密码的程序,还是有

11g 导出数据时的几种压缩方法

做一个简单的实验说明compress 参数的用法.compression=all:对于ALL方式,数据泵会对导出的源数据和表数据都进行压缩,顾名思义,这种方式得到的数据泵导出文件是最小的,不过用时相对也会比较长:在我这里由于数据量的关系,时间大小不具有可比性. C:\Users\aaaa>expdp yang/yang tables=yang_part3 directory=dumpdir dumpfile=yang_all.dmp compression=all Export: Release

Java对文件的随机读写以及压缩处理操作_java

Java中文件的随机读写 Java.io 包提供了 RandomAccessFile 类用于随机文件的创建和访问.使用这个类,可以跳转到文件的任意位置读写数据.程序可以在随机文件中插入数据,而不会破坏该文件的其他数据.此外,程序也可以更新或删除先前存储的数据,而不用重写整个文件. RandomAccessFile类是Object类的直接子类,包含两个主要的构造方法用来创 建RandomAccessFile 的对象,如表所示. 需要注意的是,mode 表示所创建的随机读写文件的操作状态,其取值包括