从Hadoop URL中读取数据

要从Hadoop文件系统中读取文件,一个最简单的方法是使用java.net.URL对象来打开一个数据流,从而从中读取数据。一般的格式如下:

1.      InputStream in = null;

2.  try {

3.       in = new URL("hdfs://host/path").openStream();

4.       // process in

5.  } finally {

6.       IOUtils.closeStream(in);

7.  }

这里还需要一点工作来让Java识别Hadoop文件系统的URL 方案,就是通过一个FsUrlStreamHandlerFactory实例来调用在URL中的setURLStreamHandler-Factory方法。这种方法在一个Java虚拟机中只能被调用一次,因此一般都在一个静态块中执行。这个限制意味着如果程序的其他部件(可能是不在你控制中的第三方部件)设置一个URLStreamHandlerFactory,我们便无法再从Hadoop中读取数据。下一节将讨论另一种方法。

例3-1展示了以标准输出显示Hadoop文件系统的文件的程序,它类似于Unix的cat命令。

例3-1:用URLStreamHandler以标准输出格式显示Hadoop文件系统的文件

1.  public class URLCat {

2.

3.    static {

4.      URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());

5.    }

6.

7.    public static void main(String[] args) throws Exception {

8.      InputStream in = null;

9.      try {

10.       in = new URL(args[0]).openStream();

11.       IOUtils.copyBytes(in, System.out, 4096, false);

12.     } finally {

13.       IOUtils.closeStream(in);

14.     }

15.   }

16. }

我们使用Hadoop中简洁的IOUtils类在finally子句中关闭数据流,同时复制输入流和输出流之间的字节(本例中是System.out)。copyBytes方法的最后两个参数,前者是要复制的缓冲的大小,后者表示复制结束后是否关闭数据流。这里是将输入流关掉了,而System.out不需要关闭。

下面是一个运行示例:

1.      % hadoop URLCat hdfs://localhost/user/tom/quangle.txt

2.  On the top of the Crumpetty Tree

3.  The Quangle Wangle sat,

4.  But his face you could not see,

5.  On account of his Beaver Hat.

时间: 2024-10-16 06:35:36

从Hadoop URL中读取数据的相关文章

ffmpeg 从内存中读取数据

http://blog.csdn.net/leixiaohua1020/article/details/12980423 ffmpeg一般情况下支持打开一个本地文件,例如"C:\test.avi" 或者是一个流媒体协议的URL,例如"rtmp://222.31.64.208/vod/test.flv" 其打开文件的函数是avformat_open_input(),直接将文件路径或者流媒体URL的字符串传递给该函数就可以了. 但其是否支持从内存中读取数据呢?这个问题困

从plist文件中读取数据

//从plist文件中读取数据- (void)readDataFromPlist{    //1.先获取文件路径    NSString * filePath = [[NSBundle mainBundle] pathForResource:@"Book" ofType:@"plist"];    //2.根据路径初始化字典对象    self.dic = [NSMutableDictionary dictionaryWithContentsOfFile:fileP

Mean and Standard Deviation-从文件中读取数据计算其平均数和标准差

Meanand Standard Deviation-从文件中读取数据计算其平均数和标准差 //Meanand Standard Deviation-从文件中读取数据计算其平均数和标准差 #include<iostream> #include<fstream> #include<cstdlib> #include<cmath>   int main() {     usingnamespace std;     ifstream fin;     ofstr

非常标准的将数据保存到file并从file中读取数据。

字符流:Reader(读) Writer(写) 字节流:InputStream(读数据)  OutputStream(写数据) 1,字节流 InputStream(读),OutputStream(写) 2,字符流 Reader(读),Writer(写) 结论:只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流. 向文件中写入内容 try { FileOutputStream fos = openFileOutput(INTERNAL_FILENAME , MODE_APPEND);

从多个XML文档中读取数据用于显示webapi帮助文档

前言: 你先得知道HelpPageConfig文件,不知道说明你现在不需要这个,所以下文就不用看了,等知道了再看也不急.当然如果你很知道这个,下文也不用看了,因为你会了. 方法一: new XmlDocumentationProvider(HttpContext.Current.Server.MapPath("~/App_Data/Documentation.xml")) 替换成 new XmlDocumentationProvider("PluginsFolder/*.xm

VC++ 从文档中读取数据

void 类名::ReadData() { CStdioFile file; CFileException exp; char* old_locale=_strdup(setlocale(LC_CTYPE,NULL) ); setlocale( LC_CTYPE,"chs"); if(file.Open(_T("c:\\MiniMenu.mnu"),CFile::typeText|CFile::modeRead,&exp) == FALSE) { CStri

无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接

我们添加客户端服务引用的时候会出现这样的错误: 下载“http://localhost:8002/WCFService”时出错. 基础连接已经关闭: 接收时发生错误. 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接.. 远程主机强迫关闭了一个现有的连接. Metadata contains a reference that cannot be resolved: 'http://localhost:8002/WCFService'. Metadata contains a refe

【Python】从文件中读取数据

从文件中读取数据 1.1 读取整个文件 要读取文件,需要一个包含几行文本的文件(文件PI_DESC.txt与file_reader.py在同一目录下) PI_DESC.txt 3.1415926535 8979323846 2643383279 5028841971 file_reader.py with open("PI_DESC.txt") as file_object: contents = file_object.read() print(contents) 我们可以看出,读取

程序一 用记事本建立文件src.dat,其中存放若干字符。编写程序,从文件src.dat中读取数据,统计其中的大写字母、小写字母、数字、其它字符的个数,并将这些数据写入到文件test.dat中。

用记事本建立文件src.dat,其中存放若干字符.编写程序,从文件src.dat中读取数据,统计其中的大写字母.小写字母.数字.其它字符的个数,并将这些数据写入到文件test.dat中. #include<stdio.h>#include<stdlib.h>#include<string.h>int main(){ FILE*fp1,*fp2; char ch; int da=0,xiao=0,shuzi=0,qita=0; if((fp1=fopen("sr