HADOOP JAVA接口

来源:互联网 发布:师洋的淘宝骂人截图 编辑:程序博客网 时间:2024/06/08 10:04

从Hadoop URL 中读取数据


package org.urlcat;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);}}}

这里采用的方法是通过 FsUrlStreamHandlerFactory 实例调用URL 中的setURLStreamHandlerFactory 方法。由于JAVA 虚拟机只能用一次上述方法,因此 通常在静态方法中调用上述方法。这个限制意味首如果程序的其他组件--如不受你控制的第三方组件--已经声明了一个URL实例,你将无法再使用上述方法从Hadoop 中读取数据。


我们可以调用Hadoop 中简洁的IOUtils 类,并在finally子句中关闭数据流,同时也可以在输入流和输出流之间复制数据。copyBytes方法的最后两个参数,第一个用于设置复制的缓冲区大小,第二个用于设置复制结束后是否关闭数据流。


通过FfileSystem API 读取数据


package org.filesystemcat;import java.io.InputStream;import java.net.URI;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IOUtils;public class FileSystemCat {public static void main(String args[])  throws Exception{String uri = args[0];Configuration conf = new Configuration();FileSystem fs = FileSystem.get(URI.create(uri),conf);InputStream in = null;try{in = fs.open(new Path(uri));IOUtils.copyBytes(in, System.out, 4096,false);}finally{IOUtils.closeStream(in);}}}