package com.mao.hdfs.compress;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.compress.*;
import org.apache.hadoop.util.ReflectionUtils;
import org.junit.Test;
import java.io.FileInputStream;
import java.io.FileOutputStream;
/**
* 测试压缩
*/
public class TestCompress {
/*
windows 测试结果
源文件大小:102 MB
源文件类型:.txt
DeflateCodec GzipCodec BZip2Codec Lz4Codec SnappyCodec
压缩时间(ms) 4921 4518 35216 534 不支持
解压时间(ms) 1306 1214 6861 712
占用空间(k) 30528 30528 3038 9587 不支持
*/
@Test
public void deflateCompress() throws Exception {
Class[] zipClasses ={
DeflateCodec.class, //deflate编解码器类
GzipCodec.class,
BZip2Codec.class,
Lz4Codec.class,
SnappyCodec.class
};
for (Class c : zipClasses){
zip(c);
}
}
/**
* 压缩测试
*/
public void zip(Class clazz) throws Exception {
long start = System.currentTimeMillis();
//实例化对象
CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(clazz,new Configuration());
//创建文件输出流,得到默认扩展名
FileOutputStream fos = new FileOutputStream("d:/mr/b"+codec.getDefaultExtension());
//得到压缩流
CompressionOutputStream zipOut = codec.createOutputStream(fos);
IOUtils.copyBytes(new FileInputStream("d:/mr/a.txt"),zipOut,1024);
zipOut.close();
System.out.println(clazz.getSimpleName()+ " 压缩测试时间: " +(System.currentTimeMillis()-start));
}
/**
* 解压缩测试
*/
public void unzip(Class clazz) throws Exception {
long start = System.currentTimeMillis();
//实例化对象
CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(clazz,new Configuration());
//创建文件输出流,得到默认扩展名
FileInputStream fis = new FileInputStream("d:/mr/b"+codec.getDefaultExtension());
//得到压缩流
CompressionInputStream zipIn = codec.createInputStream(fis);
IOUtils.copyBytes(zipIn,new FileOutputStream("d:/mr/b"+codec.getDefaultExtension()+"txt"),1024);
zipIn.close();
System.out.println(clazz.getSimpleName()+ " 解压缩测试时间: " +(System.currentTimeMillis()-start));
}
}
package com.mao.hdfs.compress;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.compress.*;
import org.apache.hadoop.util.ReflectionUtils;
import java.io.FileInputStream;
import java.io.FileOutputStream;
/**
* centos 测试压缩、解压缩
*/
public class CompressCentos {
/*
centos 测试结果
源文件大小:102 MB
源文件类型:.txt
DeflateCodec GzipCodec BZip2Codec Lz4Codec SnappyCodec
压缩时间(ms) 14602 17022 22740 489 874
解压时间(ms) 5393 13645 17188 8561 20627
占用空间 31260595 31260607 3103089 9816522 39025876
*/
public static void main(String[] args) throws Exception {
Class[] zipClasses ={
DeflateCodec.class, //deflate编解码器类
GzipCodec.class,
BZip2Codec.class,
Lz4Codec.class,
SnappyCodec.class
};
for (Class c : zipClasses){
zip(c);
}
for (Class c : zipClasses){
unzip(c);
}
}
/**
* 压缩测试
*/
public static void zip(Class clazz) throws Exception {
long start = System.currentTimeMillis();
//实例化对象
CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(clazz,new Configuration());
//创建文件输出流,得到默认扩展名
FileOutputStream fos = new FileOutputStream("/home/admin/zip/b"+codec.getDefaultExtension());
//得到压缩流
CompressionOutputStream zipOut = codec.createOutputStream(fos);
IOUtils.copyBytes(new FileInputStream("/home/admin/zip/a.txt"),zipOut,1024);
zipOut.close();
System.out.println(clazz.getSimpleName()+ " 压缩测试时间: " +(System.currentTimeMillis()-start));
}
/**
* 解压缩测试
*/
public static void unzip(Class clazz) throws Exception {
long start = System.currentTimeMillis();
//实例化对象
CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(clazz,new Configuration());
//创建文件输出流,得到默认扩展名
FileInputStream fis = new FileInputStream("/home/admin/zip/b"+codec.getDefaultExtension());
//得到压缩流
CompressionInputStream zipIn = codec.createInputStream(fis);
IOUtils.copyBytes(zipIn,new FileOutputStream("/home/admin/zip/b"+codec.getDefaultExtension()+"txt"),1024);
zipIn.close();
System.out.println(clazz.getSimpleName()+ " 解压缩测试时间: " +(System.currentTimeMillis()-start));
}
}
根据测试文件大小不同,会有不同的测试结果!