本博客属原创文章,转载请注明出处:http://guoyunsky.iteye.com/blog/1266226
欢迎加入Hadoop超级群: 180941958
压缩是绕不开的话题,因为当今很多程序的压力还是在IO.特别是Hadoop这种分布式存储和运算框架,单台机器的IO,网络通信IO都是压力和挑战.关于Hadoop为什么要用Lzo来压缩而没有选用传统的压缩方法,我这里不再阐述.相关资料很多.有兴趣的可以查看cloudera这篇博客:http://www.cloudera.com/blog/2009/11/hadoop-at-twitter-part-1-splittable-lzo-compression/
这里只是用于读写lzo文件,具体请看代码吧.
package com.guoyun.hadoop.io.study; 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; /** * 读写Lzo文件 */ public class LzoFileStudy { 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文件 * * @param destLzoFilePath * @param conf * @param datas */ public static void write2LzoFile(String destLzoFilePath,Configuration conf,byte[] datas){ LzopCodec lzo=null; OutputStream out=null; try { lzo=new LzopCodec(); lzo.setConf(conf); out=lzo.createOutputStream(new FileOutputStream(destLzoFilePath)); out.write(datas); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { if(out!=null){ out.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * 从lzo文件中读取数据 * * @param lzoFilePath * @param conf * @return */ 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 { 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) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { if(reader!=null){ reader.close(); } if(isr!=null){ isr.close(); } if(is!=null){ is.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return result; } /** * @param args */ public static void main(String[] args) { // 生成数据 String dataSource="abcdefghijklmnopqrstuvwxyz0123456789~!@#¥%……&*()——+\r"; dataSource=dataSource.concat(dataSource); dataSource=dataSource.concat(dataSource); dataSource=dataSource.concat(dataSource); String lzoFilePath="./data/test.lzo"; // 写入到lzo文件 write2LzoFile(lzoFilePath,getDefaultConf(),dataSource.getBytes()); StringBuilder sb=new StringBuilder(); // 读取lzo文件 List<String> lines=readLzoFile(lzoFilePath,getDefaultConf()); for(String line:lines){ sb.append(line); sb.append("\r"); } // 数据是否一致 if(sb.toString().equals(dataSource)){ System.out.println(sb.toString()); }else{ System.err.println("Error line:"+sb.toString()); } } }
更多技术文章、感悟、分享、勾搭,请用微信扫描:
相关推荐
0.4.20.jar 文件 ,在mac 系统下编译的,用法:解压后把hadoop-lzo-0.4.20.jar 放到你的hadoop 安装路径下的lib 下,把里面lib/Mac_OS_X-x86_64-64 下的所有文件 拷到 hadoop 安装路径下的lib/native ,再把core-...
配置hadoop支持LZO和snappy压缩
Hadoop学习笔记,自己总结的一些Hadoop学习笔记,比较简单。
Hadoop 学习笔记.md
hdfs默认不支持lzo压缩,需要通过将lzo源码融入hadoop源码,重新编译hadoop源码;或者编译lzo源码生成jar,作为插件使用
22、MapReduce使用Gzip压缩、Snappy压缩和Lzo压缩算法写文件和读取相应的文件 网址:https://blog.csdn.net/chenwewi520feng/article/details/130456088 本文的前提是hadoop环境正常。 本文最好和MapReduce操作常见...
Hadoop HA模式搭建的图文笔记、tar包工具包和配置文件等
云计算,hadoop,学习笔记, dd
hadoop学习笔记,hadoop简介,适用于hadoop入门,讲解hadoop安装,使用,基本原理,大数据,分布式等概念
hadoop 学习笔记,从搭建环境开始到具体实验。包括hdfs配置,yarn配置,分布式配置,如何编写mapreuduce 一步一步手把手,最后项目是hadoop 与 javaweb
0.4.15.jar 文件 ,在mac 系统下编译的,用法:解压后把hadoop-lzo-0.4.15.jar 放到你的hadoop 安装路径下的lib 下,把里面lib/Mac_OS_X-x86_64-64 下的所有文件 拷到 hadoop 安装路径下的lib/native ,再把core-...
Hadoop IO操作压缩的lzo算法的jar包,中间包含LzoCodec,和LzoPCodec
hadoop-cdh4.3-lzo安装及问题解决,绝对能解决,我已经亲自尝试过
大数据平台,hadoop集群学习笔记
编译后的hadoop-lzo源码,将hadoop-lzo-0.4.21-SNAPSHOT.jar放到hadoop的classpath下 如${HADOOP_HOME}/share/hadoop/common。hadoop才能正确支持lzo,免去编译的烦恼
1.安装 Hadoop-gpl-compression 1.1 wget http://hadoop-gpl-compression.apache-extras.org.codespot.com/files/hadoop-gpl-compression-0.1.0-rc0.tar.gz 1.2 mv hadoop-gpl-compression-0.1.0/lib/native/Linux-...
hadoop-lzo-0.4.21-SNAPSHOT.jar是hadoop数据压缩lzo工具包
踏入hadoop的世界,一个不一样的世界