Hadoop基础(六) --- hadoop的压缩算法,安装LZO,安装snappy,安装lz4,各种压缩算法的对比测试

一、压缩算法
--------------------------------------------------------
    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();
        }    
    }
    
}

猜你喜欢

转载自blog.csdn.net/xcvbxv01/article/details/81986213