`
阅读更多

项目需要,在脱离hadoop的环境下进行lzo压缩,折腾了好几天,总结一下备忘

【首先lzo不像gzip那样,引入个包就能压缩,lzo需要调用底层c/c++库,所以一般都是在linux下先安装lzo压缩工具,生成native lib才可以压缩。安装lzo需要ant编译工具支持,所以如果没有ant,需要先安装,主要参照了这篇博客http://www.cnblogs.com/chaoboma/archive/2013/04/27/3047625.html

1.首先安装ant工具:

tar -zxvf  apache-ant-1.8.2-bin.tar.gz 先解压缩,

一般都是移动apache-ant-1.8.2到/usr/local/目录

添加ant的环境变量:  vi /etc/profile   

export ANT_HOME=/usr/local/apache-ant-1.8.2   

export PATH=$PATH:$ANT_HOME/bin

source /etc/profile  使配置文件生效

 

2.安装lzo库  http://www.oberhumer.com/opensource/lzo/download/lzo-2.04.tar.gz   

tar -zxf  lzo-2.04.tar.gz  

进入解压后的目录 cd lzo-2.04执行   

./configure --enable-shared   

make && make install   

1)拷贝/usr/local/lib目录下的lzo库文件到/usr/lib(32位平台),或/usr/lib64(64位平台)  

2)在/etc/ld.so.conf.d/目录下新建lzo.conf文件,写入lzo库文件的路径/usr/local/lib

然后运行/sbin/ldconfig -v,使配置生效

 

3.安装lzo编码/解码器(注意32位跟64位的差别)  

http://pkgs.repoforge.org/lzo/ 

下载lzo-devel-2.04-1.el5.rf.i386.rpm  和 lzo-2.04-1.el5.rf.i386.rpm   

这里是由于缺少lzo-devel依赖的原因,lzo-devel有lzo- 2.04-1.el5.rf的依赖

rpm -ivh lzo-2.04-1.el5.rf.i386.rpm  

rpm -ivh lzo-devel-2.04-1.el5.rf.i386.rpm

如果报错,重新执行一下试试

 

4.编译hadoop lzo jar    

https://github.com/kevinweil/hadoop-lzo/downloads  上下载最新版本源码  目前为hadoop-lzo-master.zip  

unzip hadoop-lzo-master.zip

 cd hadoop-lzo-master  

32位服务器  export CFLAGS=-m32  export CXXFLAGS=-m32  

64位服务器    export CFLAGS=-m64  export CXXFLAGS=-m64

 ant compile-native tar  这是可以看到build目录中,hadoop-lzo*.jar就躺在里面

(编译时看看有没有build.xml,我第一次下载的jar就没有,后来又找地方重新下载的,而且如果linux不能连接外网的话,需要修改bulid.xml及ivysetting.xml,把maven相关的地址修改为内网地址,还要注意测试java工程中引入的是hadoop-gpl-compression-0.1.0.jar就报初始化native-lib错误的异常,把java工程里面的jar删掉,引入当前ant生成的hadoop-lzo-0.4.15.jar)

安装成功后生成build文件,/build/native/Linux-amd64-64/lib里面就是native lib,所以需要指定到LD_LIBRARY_PATH,即修改/etc/profile文件即可,添加LZO_LIBRARY_PATH=/root/gaopeng/soft/hadoop-lzo-master/build/native/Linux-amd64-64/lib

export LD_LIBRARY_PATH=$LZO_LIBRARY_PATH

或者拷贝到/usr/lib或者lib64下面,再指定到/usr/lib或lib64也一样的

5.接下来就可以参照这篇博客http://www.cnblogs.com/xuxm2007/archive/2012/06/15/2550996.html

在脱离hadoop集群的情况下进行lzo压缩的测试了

package com.jd.gp.lzotest;

 

import java.io.IOException;

 

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.io.compress.CompressionCodec;

import org.apache.hadoop.io.compress.CompressionInputStream;

import org.apache.hadoop.io.compress.CompressionOutputStream;

import org.apache.hadoop.util.ReflectionUtils;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

 

/**

 * Hello world!

 * 

 */

public class LzoStart {

 

private static final Logger logger = LoggerFactory.getLogger(LzoStart.class);

 

public static void main(String[] args) throws IOException {

logger.info("start...");

Configuration conf = new Configuration();

CompressionOutputStream out = null;

java.io.InputStream in = null;

CompressionInputStream ins = null;

try {

Class<?> codecClass = Class.forName("com.hadoop.compression.lzo.LzoCodec");

CompressionCodec codec = (CompressionCodec) ReflectionUtils.newInstance(codecClass, conf);

String outfile = "/root/gaopeng/lzo/test.txt.lzo";

out = codec.createOutputStream(new java.io.FileOutputStream(outfile));

byte[] buffer = new byte[100];

logger.info("outfile=" + outfile + ",codec.getDefaultExtension()" + codec.getDefaultExtension());

String inFilename = removeSuffix(outfile, ".lzo");

logger.info("inFilename=" + inFilename);

in = new java.io.FileInputStream(inFilename);

long start = System.currentTimeMillis();

int len = in.read(buffer);

while (len > 0) {

logger.info("out=" + new String(buffer));

out.write(buffer, 0, len);

len = in.read(buffer);

}

if(len <= 0){

out.write(new byte[]{1,1,1,1,1});

logger.info("test ok!");

}

 

logger.info("压缩成功完成!time = " + (System.currentTimeMillis() - start)/1000 + "Second");

ins = codec.createInputStream(new java.io.FileInputStream(outfile));

len = ins.read(buffer);

while (len > 0) {

logger.info("in=" + new String(buffer));

len = ins.read(buffer);

}

logger.info("解压缩成功完成!all time = " + (System.currentTimeMillis() - start)/1000 + "Second");

} catch (Exception e) {

e.printStackTrace();

logger.error(e.getLocalizedMessage());

} finally{

if(out != null){

out.close();

out = null;

}

if(in != null){

in.close();

in = null;

}

 

if(ins != null){

ins.close();

ins = null;

}

}

}

 

/**

  * Removes a suffix from a filename, if it has it.

  * @param filename the filename to strip

  * @param suffix the suffix to remove

  * @return the shortened filename

  */

 public static String removeSuffix(String filename, String suffix) {

   if (filename.endsWith(suffix)) {

     return filename.substring(0, filename.length() - suffix.length());

   }

   return filename;

 }

 

}

分享到:
评论

相关推荐

    Lzo压缩算法.例子(vs2005)

    **Lzo压缩算法详解与VS2005实践** LZO(Lempel-Ziv-Oberhumer)压缩算法是一种快速、轻量级的数据压缩算法,由Viktor Zivcovic开发。它以较低的内存需求和较高的压缩速度而闻名,尤其适合实时数据流处理。LZO的主要...

    22、MapReduce使用Gzip压缩、Snappy压缩和Lzo压缩算法写文件和读取相应的文件

    Lzo压缩速度快,但解压缩速度较慢,通常在需要快速写入数据而不太关心读取性能的场景下使用。 压缩算法的选择取决于具体的应用需求,如压缩效率、解压速度以及对压缩比的需求。在实际应用中,可能还需要考虑其他...

    lzo压缩算法 例子

    在这个例子中,"lzo压缩算法 例子" 提供了一个可运行的程序,用于演示LZO压缩算法的工作原理和使用方法。 LZO算法的核心思想基于滑动窗口匹配,即通过查找输入数据中的重复模式来实现压缩。它分为两个主要阶段:...

    lzo压缩算法源码

    这个版本包含了LZO算法的核心实现,可以用于理解和学习LZO的工作原理,或者在自己的项目中集成和定制LZO压缩功能。 LZO的基本工作原理是基于查找重复字符串的方法。它首先扫描输入数据,寻找重复的模式,并用一个较...

    Lzo压缩安装包

    Lzo压缩技术是一种高效的数据压缩算法,主要应用于大数据处理和存储场景。它的全称为"Lossless Data Compression",即无损数据压缩,这意味着压缩和解压缩后数据的完整性和原始内容保持一致。Lzo的优势在于快速的...

    Go-go-lzop-生成LZOP文件兼容LZO压缩库

    Go-lzop是一个开源项目,专门用于生成与LZO压缩库兼容的LZOP文件。在Go编程语言中,这个工具提供了一种高效且便捷的方式来处理数据压缩,特别是在需要快速存档和传输大量数据时。LZOP(Lempel-Ziv-Oberhumer ...

    LZO 压缩算法 纯pascal 语言

    在纯Pascal语言实现的LZO压缩算法中,我们可以深入探讨以下几个关键知识点: 1. **Lempel-Ziv 算法基础**:LZO算法是基于LZ77(Lempel-Ziv 1977)的改进版本。LZ77是通过查找源数据中的重复模式来创建字典项,并用...

    lzo.rar_decompression_lzo_minilzo

    《LZO压缩与解压缩——以minilzo库为例》 在信息技术领域,数据压缩是一项重要的技术,它能够有效地减少存储空间,加快数据传输速度。LZO(Lempel-Ziv-Oberhumer)是一种快速的无损数据压缩算法,而minilzo是LZO的...

    lzo压缩算法

    lzo压缩算法,windows 32位。lzop is a file compressor which is very similar to gzip. lzop uses the LZO data compression library for compression services, and its main advantages over gzip are much ...

    嵌入式系统/ARM技术中的基于FPGA的LZO实时无损压缩的硬件设计

    本文通过对多种压缩算法作进一步研究对比后发现,LZO压缩算法是一种被称为实时无损压缩的算法,LZO压缩算法在保证实时压缩速率的优点的同时提供适中的压缩率。如图1(A)给出了Linux操作系统下常见开源压缩算法的压缩...

    lzo-2.06.tar.gz/lzo-2.10.tar.gz

    标题中的“lzo-2.06.tar.gz/lzo-2.10.tar.gz”指的是LZO压缩库的两个不同版本的源代码压缩包,分别对应版本2.06和2.10。这些文件是用tar.gz格式打包的,这是一种在Unix和类Unix系统中常见的归档和压缩方法。tar主要...

    LZO 压缩算法 纯pascal 语言 支持x64

    前面传的出现解包不全的现象,现在这个经过测试 工作是正常的 , 支持64位编译器

    lzo2.0.9压缩工具

     (5)、允许在压缩部分以损失压缩速度为代价提高压缩率,解压速度不会降低。  (6)、包括生成预先压缩数据的压缩级别,这样可以得到相当有竞争力的压缩比。  (7)、另外还有一个只需要8 kB内存的压缩级别。  ...

    pyspark读lzo需要依赖

    在Spark中处理LZO压缩的数据集时,需要特定的依赖项来支持这种压缩格式。LZO(Lempel-Ziv-Oberhumer)是一种高效的数据压缩算法,常用于大数据存储和传输,因为它提供了快速的解压速度。然而,Pyspark默认并不包含...

    图形图像压缩资料(LZO+LZSS+LZW)

    本文将深入探讨三种常见的无损压缩算法:LZO(Lempel-Ziv-Oberhumer)、LZSS(Lempel-Ziv-Storer-Szymanski)以及LZW(Lempel-Ziv-Welch)。这些算法广泛应用于图像、文本和其他数据类型的压缩,以减少存储需求和...

    hadoop-lzo-0.4.21-SNAPSHOT.jar

    《Hadoop LZO压缩工具详解》 在大数据处理领域,Hadoop是一个不可或缺的开源框架,它为海量数据的存储和处理提供了强大支持。而在数据压缩方面,Hadoop LZO是其中一种常用的数据压缩工具,本文将详细介绍这个工具...

    2.Hadoop-lzo.7z lzo源码+包

    描述中提到,HDFS(Hadoop分布式文件系统)默认并不直接支持LZO压缩格式。为了在Hadoop集群中使用LZO,有两种主要的方法: 1. **融入Hadoop源码**:首先,你需要获取Hadoop的源代码,然后将LZO的源代码整合进Hadoop...

    hadoop-lzo-0.4.20.jar

    1. **数据存储效率**:通过LZO压缩,可以减小HDFS(Hadoop Distributed File System)中存储的数据量,从而节省存储空间。尽管LZO的压缩比不如其他算法如Gzip或Bzip2,但其压缩和解压缩速度更快,更适合大规模数据...

    minilzo-1.08.tar.gz_lzo_minilzo_minilzo._python lzo_图像压缩

    "lzo_minilzo_minilzo._python lzo_图像压缩"这部分描述了该软件包的核心——LZO压缩算法的迷你版本(minilzo),以及它与Python的关联,以及其在图像压缩领域的应用。 描述中提到,“迷你lzo算法库”指的是minilzo...

Global site tag (gtag.js) - Google Analytics