一、压缩算法
--------------------------------------------------------
1.空间优先 -9 、速度优先 -1
2.压缩算法
"org.apache.hadoop.io.compress.DeflateCodec"
"org.apache.hadoop.io.compress.DefaultCodec"
"org.apache.hadoop.io.compress.GzipCodec"
"org.apache.hadoop.io.compress.BZip2Codec"
"com.hadoop.compression.lzo.LzoCodec"
"org.apache.hadoop.io.compress.Lz4Codec"
"org.apache.hadoop.io.compress.SnappyCodec"
二 、安装LZO
-------------------------------------------
1.lzo支持可切割的压缩方式,是理想的压缩格式,兼具空间和速度的优势
2.下载lzo:
地址:http://www.oberhumer.com/opensource/lzo/
3.配置lzo,生成共享库
在lzo解压目录下,执行 $> ./configure --enable-shared,生成共享库
4.安装lzo
a.$> sudo make && sudo make install
b.在windows下,可以执行批处理文件 B\win64\vc_dll.bat,进行安装
5.编译hadoop-lzo项目( hadoop-lzo-master)
a.找到lzo 类库 hadoop-lzo-master,pom.xml
$> mvn clean package -Dmaven.test.skip=true
6.进入hadoop-lzo-master下,查看是否有target,是否在其中生成了jar包
7.将生成的hadoop-lzo-0.4.20-SNAPSHOT.jar,拷贝到eclipse工程的lib下
8.对于eclipse native-lzo library not available 等错误解决办法
解决:在usr/lib下,创建hadoop 的本地库的快捷方式
$> sudo ln -s /soft/hadoop/lib/native/libhadoop.so.1.0.0 /usr/lib/libhadoop.so
三、安装snappy
--------------------------------------------------
1.搜索软件包
$> sudo apt-cache search snappy
2.安装
$> sudo apt-get install libsnappy1
四、安装lz4
---------------------------------------------------
1.下载lz4.tar.gz
2.tar开
3.进入目录下,执行
&> sudo make && make install
4.验证是否安装成功
$> cd /usr/local/lib/liblz4.so.1.7.1 是否存在
五、压缩对比测试
--------------------------------------------------------------------
DeflateCodec 压缩耗时:471
DeflateCodec 压缩size : 362254
DefaultCodec 压缩耗时:19
DefaultCodec 压缩size : 362254
GzipCodec 压缩耗时:25
GzipCodec 压缩size : 362266
BZip2Codec 压缩耗时:653
BZip2Codec 压缩size : 368527
LzopCodec 压缩耗时:43
LzopCodec 压缩size : 415674
SnappyCodec 压缩耗时:11
SnappyCodec 压缩size : 380812
Lz4Codec 压缩耗时:7
Lz4Codec 压缩size : 373645
public class Ts01 {
private static Configuration conf;
private String [] classnames = new String []{
"org.apache.hadoop.io.compress.DeflateCodec",
"org.apache.hadoop.io.compress.DefaultCodec",
"org.apache.hadoop.io.compress.GzipCodec",
"org.apache.hadoop.io.compress.BZip2Codec",
"com.hadoop.compression.lzo.LzopCodec",
"org.apache.hadoop.io.compress.Lz4Codec",
"org.apache.hadoop.io.compress.SnappyCodec" ,
};
/**
* 初始化配置文件,在单元测试之前执行
*/
@BeforeClass
public static void initConf()
{
conf = new Configuration();
}
/**
* 对比所有的压缩算法
*/
@Test
public void testAllCodec()
{
for(String name : classnames)
{
compressSpaceIncode(name);
}
}
/**
* 对比使用特定的编解码器性能
*/
private void compressSpaceIncode(String codecClass)
{
try {
//1.通过反射实例化编解码器
long start = System.currentTimeMillis();
Class clazz = Class.forName(codecClass);
//2.通过反射实现,实例化编解码器
CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(clazz, conf);
//3.对输出流进行包装,产生新的压缩流
String ext = (clazz.getSimpleName().substring(0, (clazz.getSimpleName().length() - 5))).toLowerCase();
FileOutputStream fos = new FileOutputStream("d:\\test\\hadoop." + ext);
CompressionOutputStream out = codec.createOutputStream(fos);
//拷贝流--将localfile 输入流 拷贝到
IOUtils.copyBytes(new FileInputStream("d:\\test\\1.jpg"), out, conf);
System.out.println(clazz.getSimpleName() + "压缩耗时:" + (System.currentTimeMillis() - start));
System.out.println();
} catch (Exception e) {
e.printStackTrace();
}
}
}