1:使用java.net.url 不过需要转换,这是最间的那的一种,有缺陷
public class URLCat { /** * @param args */ static{ URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory()); // 将hdfs 格式的url 转换成系统能够识别的 } public static void main(String[] args) throws MalformedURLException, IOException { // TODO Auto-generated method stub InputStream in = null; try{ in = new URL(args[0]).openStream(); IOUtils.copy(in, System.out); }finally{ IOUtils.closeQuietly(in); } } }
2 使用 FileSystem API ,hadoop 自带的FileSystem API 实现hdfs 到本地系统的转换:
// cc FileSystemCat Displays files from a Hadoop filesystem on standard output by using the FileSystem directly 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; // vv FileSystemCat 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); // 设置filesystem 的路径为:hdfs://localhost:9000 会从uri 提取出上面的路径 默认的hdfs 路径为file:\\\ System.out.println("URI.create(uri) = " + URI.create(uri) ); // FileSystem fs = FileSystem.get(conf); 这样是不行的 System.out.println(fs.getUri().toString()); //可以看出filesystem.get 提取整个文件系统的uri InputStream in = null; try{ in = fs.open(new Path(args[0])); // 创建输出流 这里就可以使用hdfs 的uri 来进行读取了 IOUtils.copyBytes(in, System.out, 4096, false); } finally { IOUtils.closeStream(in);//关闭之 } } } // ^^ FileSystemCat
读取HDFS 系统中数据
最新推荐文章于 2022-02-11 16:39:39 发布