项目需要,在脱离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(Lempel-Ziv-Oberhumer)压缩算法是一种快速、轻量级的数据压缩算法,由Viktor Zivcovic开发。它以较低的内存需求和较高的压缩速度而闻名,尤其适合实时数据流处理。LZO的主要...
Lzo压缩速度快,但解压缩速度较慢,通常在需要快速写入数据而不太关心读取性能的场景下使用。 压缩算法的选择取决于具体的应用需求,如压缩效率、解压速度以及对压缩比的需求。在实际应用中,可能还需要考虑其他...
在这个例子中,"lzo压缩算法 例子" 提供了一个可运行的程序,用于演示LZO压缩算法的工作原理和使用方法。 LZO算法的核心思想基于滑动窗口匹配,即通过查找输入数据中的重复模式来实现压缩。它分为两个主要阶段:...
这个版本包含了LZO算法的核心实现,可以用于理解和学习LZO的工作原理,或者在自己的项目中集成和定制LZO压缩功能。 LZO的基本工作原理是基于查找重复字符串的方法。它首先扫描输入数据,寻找重复的模式,并用一个较...
Lzo压缩技术是一种高效的数据压缩算法,主要应用于大数据处理和存储场景。它的全称为"Lossless Data Compression",即无损数据压缩,这意味着压缩和解压缩后数据的完整性和原始内容保持一致。Lzo的优势在于快速的...
Go-lzop是一个开源项目,专门用于生成与LZO压缩库兼容的LZOP文件。在Go编程语言中,这个工具提供了一种高效且便捷的方式来处理数据压缩,特别是在需要快速存档和传输大量数据时。LZOP(Lempel-Ziv-Oberhumer ...
在纯Pascal语言实现的LZO压缩算法中,我们可以深入探讨以下几个关键知识点: 1. **Lempel-Ziv 算法基础**:LZO算法是基于LZ77(Lempel-Ziv 1977)的改进版本。LZ77是通过查找源数据中的重复模式来创建字典项,并用...
《LZO压缩与解压缩——以minilzo库为例》 在信息技术领域,数据压缩是一项重要的技术,它能够有效地减少存储空间,加快数据传输速度。LZO(Lempel-Ziv-Oberhumer)是一种快速的无损数据压缩算法,而minilzo是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 ...
本文通过对多种压缩算法作进一步研究对比后发现,LZO压缩算法是一种被称为实时无损压缩的算法,LZO压缩算法在保证实时压缩速率的优点的同时提供适中的压缩率。如图1(A)给出了Linux操作系统下常见开源压缩算法的压缩...
标题中的“lzo-2.06.tar.gz/lzo-2.10.tar.gz”指的是LZO压缩库的两个不同版本的源代码压缩包,分别对应版本2.06和2.10。这些文件是用tar.gz格式打包的,这是一种在Unix和类Unix系统中常见的归档和压缩方法。tar主要...
前面传的出现解包不全的现象,现在这个经过测试 工作是正常的 , 支持64位编译器
(5)、允许在压缩部分以损失压缩速度为代价提高压缩率,解压速度不会降低。 (6)、包括生成预先压缩数据的压缩级别,这样可以得到相当有竞争力的压缩比。 (7)、另外还有一个只需要8 kB内存的压缩级别。 ...
在Spark中处理LZO压缩的数据集时,需要特定的依赖项来支持这种压缩格式。LZO(Lempel-Ziv-Oberhumer)是一种高效的数据压缩算法,常用于大数据存储和传输,因为它提供了快速的解压速度。然而,Pyspark默认并不包含...
本文将深入探讨三种常见的无损压缩算法:LZO(Lempel-Ziv-Oberhumer)、LZSS(Lempel-Ziv-Storer-Szymanski)以及LZW(Lempel-Ziv-Welch)。这些算法广泛应用于图像、文本和其他数据类型的压缩,以减少存储需求和...
《Hadoop LZO压缩工具详解》 在大数据处理领域,Hadoop是一个不可或缺的开源框架,它为海量数据的存储和处理提供了强大支持。而在数据压缩方面,Hadoop LZO是其中一种常用的数据压缩工具,本文将详细介绍这个工具...
描述中提到,HDFS(Hadoop分布式文件系统)默认并不直接支持LZO压缩格式。为了在Hadoop集群中使用LZO,有两种主要的方法: 1. **融入Hadoop源码**:首先,你需要获取Hadoop的源代码,然后将LZO的源代码整合进Hadoop...
1. **数据存储效率**:通过LZO压缩,可以减小HDFS(Hadoop Distributed File System)中存储的数据量,从而节省存储空间。尽管LZO的压缩比不如其他算法如Gzip或Bzip2,但其压缩和解压缩速度更快,更适合大规模数据...
"lzo_minilzo_minilzo._python lzo_图像压缩"这部分描述了该软件包的核心——LZO压缩算法的迷你版本(minilzo),以及它与Python的关联,以及其在图像压缩领域的应用。 描述中提到,“迷你lzo算法库”指的是minilzo...