Hadoop学习笔记0003——从Hadoop URL读取数据
2015-04-11 12:39
471 查看
Hadoop学习笔记0003——从Hadoop URL读取数据
从HadoopURL读取数据
要从Hadoop文件系统中读取文件,一个最简单的方法是使用java.net.URL对象来打开一个数据流,从而从中读取数据。一般的格式如下:
这里还需要一点工作来让Java识别Hadoop文件系统的URL方案,就是通过一个FsUrlStreamHandlerFactory实例来调用在URL中的setURLStreamHandler-Factory方法。这种方法在一个Java虚拟机中只能被调用一次,因此一般都在一个静态块中执行。这个限制意味着如果程序的其他部件(可能是不在你控制中的第三方部件)设置一个URLStreamHandlerFactory,我们便无法再从Hadoop中读取数据。
我们使用Hadoop中简洁的IOUtils类在finally子句中关闭数据流,同时复制输入流和输出流之间的字节(本例中是System.out)。copyBytes方法的最后两个参数,前者是要复制的缓冲的大小,后者表示复制结束后是否关闭数据流。这里是将输入流关掉了,而System.out不需要关闭。
实例操作如下:
1、新建一个Map/Reduce Project项目
2、建立一个URLCat类,包名称com.hadoop.test
3、测试在URLCat界面右击选择Run
As->Run Configurations
4、测试结果
从HadoopURL读取数据
要从Hadoop文件系统中读取文件,一个最简单的方法是使用java.net.URL对象来打开一个数据流,从而从中读取数据。一般的格式如下:
InputStream in = null; try { in = new URL("hdfs://host/path").openStream(); // process in } finally { IOUtils.closeStream(in); }<span style="font-weight: bold;"> </span>
这里还需要一点工作来让Java识别Hadoop文件系统的URL方案,就是通过一个FsUrlStreamHandlerFactory实例来调用在URL中的setURLStreamHandler-Factory方法。这种方法在一个Java虚拟机中只能被调用一次,因此一般都在一个静态块中执行。这个限制意味着如果程序的其他部件(可能是不在你控制中的第三方部件)设置一个URLStreamHandlerFactory,我们便无法再从Hadoop中读取数据。
public class URLCat { static { URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory()); } public static void main(String[] args) throws Exception { InputStream in = null; try { in = new URL(args[0]).openStream(); IOUtils.copyBytes(in, System.out, 4096, false); } finally { IOUtils.closeStream(in); } } }
我们使用Hadoop中简洁的IOUtils类在finally子句中关闭数据流,同时复制输入流和输出流之间的字节(本例中是System.out)。copyBytes方法的最后两个参数,前者是要复制的缓冲的大小,后者表示复制结束后是否关闭数据流。这里是将输入流关掉了,而System.out不需要关闭。
实例操作如下:
1、新建一个Map/Reduce Project项目
2、建立一个URLCat类,包名称com.hadoop.test
package com.hadoop.test; import java.io.InputStream; import java.net.URL; import org.apache.hadoop.fs.FsUrlStreamHandlerFactory; import org.apache.hadoop.io.IOUtils; public class URLCat { static { URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory()); } public static void main(String[] args) throws Exception { InputStream in = null; try { in = new URL(args[0]).openStream(); IOUtils.copyBytes(in, System.out, 4096, false); } finally { IOUtils.closeStream(in); } } }
3、测试在URLCat界面右击选择Run
As->Run Configurations
4、测试结果
相关文章推荐
- Hadoop学习笔记——1.java读取Oracle中表的数据,创建新文件写入Hdfs
- Hadoop Core 学习笔记(一) SequenceFile文件写入和读取Writable数据
- java学习笔记——jsp简单方法读取txt文本数据
- iOS学习笔记3—NSKeyedUnarchiver进行本地数据的读取|存储
- Hadoop URL数据读取操作
- [学习笔记]二进制数据的处理(1) 普通二进制数据处理 B -------读取数据库中二进制数据
- matlab学习笔记:读取数据
- R语言学习笔记(二)——从文件读取数据
- C++学习笔记之由文本文件读取数据到vector模板建立的二维数组 并存储为新的文本文件
- ExcelHelp 学习笔记一: C#读取Excel中数据
- Hadoop URL读取数据
- 【Java学习笔记】读取URL
- 数据、进程-云计算学习笔记---Hadoop简介,hadoop实现原理,NoSQL介绍...与传统关系型数据库对应关系,云计算面临的挑战-by小雨
- Hadoop学习笔记-大数据开发 入门 初学者 基本概念
- Java6学习笔记61——读取URL
- Hadoop学习笔记(七):使用distcp并行拷贝大数据文件
- 【hadoop】Hadoop学习笔记(七):使用distcp并行拷贝大数据文件
- Cassandra学习笔记之数据读取
- SMP3.0学习笔记之十二 使用AppBuilder读取OData服务的数据
- 使用Hadoop URL读取数据