- /**
- * @author HJX
- * @version 1.0,2013-01-16
- * @since JDK1.7,Ubuntu-12.04-64bit
- * 在hadoop环境下运行
- * 将一个String写入到本地lzo文件中(不是hadoop的hdfs上)
- * 再从该lzo文件中读取出来并与原String进行校对
- */
- import java.io.BufferedReader;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.OutputStream;
- import java.util.ArrayList;
- import java.util.List;
- import org.apache.hadoop.conf.Configuration;
- import com.hadoop.compression.lzo.LzopCodec;
- public class LzoCompress {
- /**
- * @param args
- */
- public static void main(String[] args) {
- //生成数据
- String dataSource = "abcdefghijklmnopqrstuvwxyz0123456789~!%#^@*#*%$(\n";
- dataSource = dataSource.concat(dataSource);
- dataSource = dataSource.concat(dataSource);
- dataSource = dataSource.concat(dataSource);
- /* System.out.println("dataSource = " + dataSource);*/
- String lzoFilePath = "/home/hadoop/LzoCompressTest.lzo";
- //写入到lzo文件,即lzo压缩
- write2LzoFile(lzoFilePath, getDefaultConf(),dataSource.getBytes());
- StringBuilder sb = new StringBuilder();
- //读取lzo文件,即lzo解压缩
- List<String> lines = readLzoFile(lzoFilePath, getDefaultConf());
- for(String line : lines) {
- sb.append(line);
- //LINUX/UNIX 下添加一个换行符
- sb.append("\n");
- /* //Windows 下添加一个换行符
- sb.append("\r\n");*/
- }
- if (sb.toString().equals(dataSource)) {
- System.out.println(sb.toString());
- } else {
- System.err.println("Error line : " + sb.toString());
- }
- }
- private static Configuration getDefaultConf(){
- Configuration conf = new Configuration();
- conf.set("mapred.job.tracker", "local");
- conf.set("fs.default.name", "file:///");
- conf.set("io.compression.codecs", "com.hadoop.compression.lzo.LzoCodec");
- return conf;
- }
- /**
- * 写数据到lzo文件,即lzo压缩
- * @param destLzoFilePath
- * @param conf
- * @param datas
- * @return void
- */
- public static void write2LzoFile(String destLzoFilePath,Configuration conf,byte[] datas) {
- LzopCodec lzo = null;
- OutputStream out = null;
- try {
- /* System.setProperty("java.library.path", "/usr/local/hadoop/lib/native/Linux-amd64-64/lib");*/
- lzo = new LzopCodec();
- lzo.setConf(conf);
- out = lzo.createOutputStream(new FileOutputStream(destLzoFilePath));
- out.write(datas);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- if(out != null) {
- out.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- /**
- * 从lzo文件中读取数据,即lzo解压缩
- * @param lzoFilePath
- * @param conf
- * @return void
- */
- public static List<String> readLzoFile(String lzoFilePath,Configuration conf) {
- LzopCodec lzo = null;
- InputStream is = null;
- InputStreamReader isr = null;
- BufferedReader reader = null;
- List<String> result = null;
- String line = null;
- try {
- /* System.setProperty("java.library.path", "/usr/local/hadoop/lib/native/Linux-amd64-64/lib");*/
- lzo = new LzopCodec();
- lzo.setConf(conf);
- is = lzo.createInputStream(new FileInputStream(lzoFilePath));
- isr = new InputStreamReader(is);
- reader = new BufferedReader(isr);
- result = new ArrayList<String>();
- while((line = reader.readLine()) != null) {
- result.add(line);
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- if (reader != null) {
- reader.close();
- }
- if (isr != null) {
- isr.close();
- }
- if (is != null) {
- is.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return result;
- }
- }
程序是没有错的,但是一开始运行的时候总会提示无法读取libgplcompression这个库,其实我知道少了哪些库的,分别是
libgplcompression.a
libgplcompression.la
libgplcompression.so
libgplcompression.so.0
libgplcompression.so.0.0.0
可问题是把这些库放在哪里。尝试过把这几个库放在$CLASSPATH下面,但没用。于是查看了错误提示,提示缺少的这个库在 com.hadoop.compression.lzo.GPLNativeCodeLoader这个类里面被引用到,于是看了一下hadoop- lzo-0.45.jar的源文件(当时编译hadoop-lzo-0.45.jar时留下的源文件,在kevinweil-hadoop-lzo- 6bb1b7f/src/java/com/hadoop/compression/lzo/里),GPLNativeCodeLoader.java的 内容是这样的:
- package com.hadoop.compression.lzo;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- public class GPLNativeCodeLoader {
- private static final Log LOG = LogFactory.getLog(GPLNativeCodeLoader.class);
- private static boolean nativeLibraryLoaded = false;
- static {
- try {
- //try to load the lib
- System.loadLibrary("gplcompression");
- nativeLibraryLoaded = true;
- LOG.info("Loaded native gpl library");
- } catch (Throwable t) {
- LOG.error("Could not load native gpl library", t);
- nativeLibraryLoaded = false;
- }
- }
- /**
- * Are the native gpl libraries loaded?
- * @return true if loaded, otherwise false
- */
- public static boolean isNativeCodeLoaded() {
- return nativeLibraryLoaded;
- }
- }
这里跟load那个libgplcompression库 有关的语句应该是try语句块里面的那个System.loadLibrary("gplcompression");
于是我再查了一下这个loadLibrary的动作到底是怎样的动作。于是在这篇blog里找到了解答:http://blog.csdn.net/forandever/article/details/5983846
System.loadLibrary()load的是 java.library.path这一jvm变量所指向的路径中的库。那我只要把那些libgplcompression库 所在的文件夹加入到java.library.path里面不就行了~于是我查找设置java.library.path的方法,
方法1:命令行
java -Djava.library.path=/path/to/libgplcompression/ ***.class
方法2:java语句
在程序里加入这么一句,System.setProperty("java.library.path", "/path/to/libgplcompression/");
就找了这么2个方法,可是这2个方法都只能临时改变java.library.path的值!
除了这2个方法,我找不到别的方法了,累死了,不再找了,索性把libgplcompression这些库给copy到java.library.path指向的文件夹里!
copy完后,再次执行,OK了!
要获取java.library.path的值,可以用java语句
System.out.println(System.getProperty("java.library.path"));
我的是
/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
参考资料:
gpllibcompression库以及hadoop-lzo-0.4.15.jar下载链接
相关推荐
LZOAccel-D采用了LZO 2.10标准,这是一种高效的实时数据压缩库(oberhumer.com: LZO real-time data compression library),确保了与广泛使用的LZO压缩算法的兼容性。这意味着用户可以在不同的平台上无缝地使用该解...
接着,程序会创建一个压缩或解压缩的实例,调用minilzo库提供的接口,如lzo1x_1_15_compress()和lzo1x_decompress()等函数,实现数据的压缩和解压缩。最后,通过QT的GUI组件展示压缩前后的数据大小,以直观地展现...
在这个压缩包里,Readme.txt文件很可能会解释如何解压缩和使用包含的资源,特别是如何在QQ聊天中应用这些“好看的QQ字”。 综上所述,这个压缩包可能包含了一系列与QQ聊天视觉体验相关的资源,比如特殊的字体或字符...
- 解压缩文件: ``` lzop -d compressed_file.lzo ``` - 压缩后保留原始文件: ``` lzop file_to_compress ``` - 查看LZOP版本: ``` lzop --version ``` 在Android 4.0的开发和维护中,熟悉并熟练运用...
wangtengfei-hn_EmployeesExample_23540_1745868671962
scratch少儿编程逻辑思维游戏源码-汽车冲突.zip
scratch少儿编程逻辑思维游戏源码-棱镜.zip
少儿编程scratch项目源代码文件案例素材-直升机坠毁.zip
输入法优化与定制_五笔编码编辑与词库管理_Rime输入法引擎与86极点码表_跨平台五笔码表编辑器工具_for_macOS与Windows系统_支持用户自定义词条添加删除与排序_提供
少儿编程scratch项目源代码文件案例素材-主题乐园大亨.zip
scratch少儿编程逻辑思维游戏源码-迷失在像素平原.zip
少儿编程scratch项目源代码文件案例素材-纸格通关 云变量.zip
wanjunshe_Python-Tensorflow_12888_1745868924470
scratch少儿编程逻辑思维游戏源码-深入海底.zip
驾校自动化_网页自动化爬虫技术_Python27多线程HTTP请求模拟_龙泉驾校2014版约车系统自动预约助手_通过模拟登录和循环请求实现自动约车功能_支持失败自动递增车号重试_
scratch少儿编程逻辑思维游戏源码-南瓜危机.zip
scratch少儿编程逻辑思维游戏源码-皮博冒险者.zip
基于c++开发的网络嗅探器,重点对TCP、UDP、ARP、IGMP、ICMP 等数据包进行分析,实现捕捉前过滤、数据包统计、流量统计等功能+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于c++开发的网络嗅探器,重点对TCP、UDP、ARP、IGMP、ICMP 等数据包进行分析,实现捕捉前过滤、数据包统计、流量统计等功能+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档~ 基于c++开发的网络嗅探器,重点对TCP、UDP、ARP、IGMP、ICMP 等数据包进行分析,实现捕捉前过滤、数据包统计、流量统计等功能+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于c++开发的网络嗅探器,重点对TCP、UDP、ARP、IGMP、ICMP 等数据包进行分析,实现捕捉前过滤、数据包统计、流量统计等功能+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于c++开发的网络嗅探器,重点对TCP、UDP、ARP、IGMP、ICMP 等数据包进行分析,实现捕捉前过滤、数据包统计、流量统计等功能+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档
用于释放电脑的内存,很好用。
scratch少儿编程逻辑思维游戏源码-气球足球.zip