本博客属原创文章,转载请注明出处: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()); } } }
更多技术文章、感悟、分享、勾搭,请用微信扫描:
相关推荐
标题中的“2.Hadoop-lzo.7z lzo源码+包”指的是一个包含Hadoop-LZO相关的源代码和预编译的库文件的压缩包。Hadoop-LZO是Hadoop生态系统中的一个扩展,它提供了对LZO(一种高效的压缩算法)的支持。LZO是一种快速的...
0.4.20.jar 文件 ,在mac 系统下编译的,用法:解压后把hadoop-lzo-0.4.20.jar 放到你的hadoop 安装路径下的lib 下,把里面lib/Mac_OS_X-x86_64-64 下的所有文件 拷到 hadoop 安装路径下的lib/native ,再把core-...
0.4.15.jar 文件 ,在mac 系统下编译的,用法:解压后把hadoop-lzo-0.4.15.jar 放到你的hadoop 安装路径下的lib 下,把里面lib/Mac_OS_X-x86_64-64 下的所有文件 拷到 hadoop 安装路径下的lib/native ,再把core-...
用户无需改变原有的MapReduce程序,只需指定使用LZO格式,Hadoop就能自动处理数据的读取和写入。此外,Hadoop-LZO还包含一个本地编译的库,用于加速Hadoop在解压LZO数据时的性能。 四、安装与配置 在使用Hadoop-...
2. `hadoop-lzo-0.4.21-SNAPSHOT.jar`:这是核心的Hadoop-LZO库文件,包含了编译后的二进制代码,可供Hadoop项目直接引用。在Hadoop的类路径中添加这个JAR文件后,就可以在MapReduce任务或者HDFS操作中使用LZO压缩...
2. 数据压缩:Hadoop LZO提供了一种名为`LZOFileFormat`的文件格式,可以用来创建和读取LZO压缩的文件。通过设置`mapreduce.output.fileoutputformat.class`属性为`com.hadoop.compression.lzo.LZOFileOutputFormat`...
3. **配置Hadoop**:修改Hadoop的相关配置文件(如`hadoop-env.sh`,`core-site.xml`),设置LZO的路径和依赖项。 4. **分发和测试**:将编译好的LZO库分发到集群的所有节点,并进行简单的测试,确保所有节点都能...
10. **测试与监控**:通过写入和读取数据到HDFS,以及提交MapReduce作业,验证HA功能是否正常。同时,应定期检查日志和监控系统,确保NameNode和ResourceManager的健康状态。 在提供的压缩包文件中,"HDP HAģʽ...
Hadoop学习笔记,自己总结的一些Hadoop学习笔记,比较简单。
本笔记将从环境搭建、HDFS配置、YARN配置、分布式配置到MapReduce编程,全方位介绍Hadoop的学习过程,并结合JavaWeb项目实践,帮助读者深入理解Hadoop的工作原理和应用。 ### 一、环境搭建 在开始Hadoop的学习之前...
本篇文章将详细探讨MapReduce如何使用Gzip、Snappy和Lzo这三种压缩算法来写入和读取文件。 1. Gzip压缩 Gzip是一种广泛使用的压缩算法,其压缩率较高,但压缩和解压缩速度相对较慢。在MapReduce中,通过设置`...
为了在Hadoop集群中使用Hadoop LZO,用户需要将库文件添加到Hadoop的类路径中,并配置Hadoop的属性,如`io.compression.codecs`和`io.compression.codec.lzo.class`,以启用LZO压缩支持。同时,还需要确保集群中的...
而“hadoop-lzo-master.zip”则是Hadoop-LZO项目的源代码,通常包含了项目的所有文件,包括Java源代码、构建脚本和文档,用户可以下载并根据指导进行编译和部署,以在Hadoop集群上启用LZO压缩功能。 在大数据处理中...
Hadoop 学习笔记.md
在本篇"Hadoop学习笔记(三)"中,我们将探讨如何使用Hadoop的MapReduce框架来解决一个常见的问题——从大量数据中找出最大值。这个问题与SQL中的`SELECT MAX(NUMBER) FROM TABLE`查询相似,但在这里我们通过编程...
6. 更新Hadoop配置文件(如`core-site.xml`),添加对LZO压缩的支持,指定相关的压缩格式和编码器。 7. 重启Hadoop服务,使新的配置生效。 完成上述步骤后,Hadoop集群就可以使用LZO压缩功能了。在HDFS上存储数据时...
云计算,hadoop,学习笔记, dd