相关阅读,也可以采用HDFS的API来读取

作者: 软件开发  发布:2019-08-08

用这个命令bin/Hadoop fs -cat 可以将HDFS上的文件内容读取到控制台。

在Hadoop中用作文件操作的主类位于org.apache.hadoop.fs包中。基本的文件操作有open、read、write和close。实际上,Hadoop的文件API是通用的,可用于HDFS以外的文件系统。

可以用bin/Hadoop fs -ls 来读取HDFS某一目录下的文件列表及属性信息。

一、首先根据HDFS的API写一段程序,然后是用Eclipse进行debug 单步跟踪,从而查看源码执行流程:

也可以采用HDFS的API来读取。如下:

Hadoop文件API的起点是FileSystem类,这是一个与文件系统交互的抽象类,存在不同的具体实现子类来处理HDFS和本地文件系统,可以通过调用factory方法FileSystem.get(Configuration conf)来得到所需的FileSystem实例。Configuration类适用于保留键/值配置参数的特殊类。它的默认实例化方法是以HDFS系统的资源配置为基础的。

也可以采用HDFS的API来读取。如下:

  1. import java.net.URI;  
  2.   
  3. import org.apache.Hadoop.conf.Configuration;  
  4. import org.apache.hadoop.fs.FSDataInputStream;  
  5. import org.apache.hadoop.fs.FileSystem;  
  6. import org.apache.hadoop.fs.Path;  
  7. import org.apache.hadoop.io.IOUtils;  
  8.   
  9. public class testRead1 {  
  10.     public static void main(String[] args) throws Exception{  
  11.         //String uri = args[0];   
  12.         String uri = "hdfs://localhost:9000/user/mmliu/test01.txt";  
  13.         Configuration conf = new Configuration();  
  14.         FileSystem fs = FileSystem.get(URI.create(uri), conf);  
  15.         FSDataInputStream in = null;  
  16.         try {  
  17.             in = fs.open(new巴黎人游戏官网, Path(uri));  
  18.             IOUtils.copyBytes(in, System.out, 4096, false);  
  19.             in.seek(0);  
  20.             IOUtils.copyBytes(in, System.out, 4096, false);  
  21.         } finally {  
  22.             IOUtils.closeStream(in);  
  23.         }  
  24.     }  
  25. }  

import java.net.URI;
import java.io.InputStream;
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 FileCat
{
 public static void main(String[] args) throws Exception
 {
  if(args.length != 1){
  System.out.println("Usage FileCat <target>");
  System.exit(1);
  }
  Configuration conf = new Configuration();
  FileSystem hdfs = FileSystem.get(URI.create(args[0]),conf);
  InputStream in = null;
  try{
  in = hdfs.open(new Path(args[0]));
  IOUtils.copyBytes(in,System.out,4096,true);
  }finally{
  IOUtils.closeStream(in);
  }
 }
}

如下,可以得到与HDFS接口的FileSystem对象:

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.fs.FileStatus;
import org.apache.hadoop.fs.FileUtil;
public class  FilesList
{
 public static void main(String[] args) throws Exception
 {
  if(args.length != 1){
   System.out.println("Usage : FilesList <target>");
   System.exit(1);
  }
  Configuration conf = new Configuration();
  FileSystem hdfs = FileSystem.get(URI.create(args[0]),conf);
  FileStatus[] fs = hdfs.listStatus(new Path(args[0]));
  Path[] listPath = FileUtil.stat2Paths(fs);
  for(Path p : listPath)
   System.out.println(p);
 }
}

先给出整体的序列图以便后边分析:

相关阅读:

Configuration conf = new Configuration();

相关阅读:

巴黎人游戏官网 1

将本地文件拷到HDFS中 http://www.linuxidc.com/Linux/2013-05/83866.htm

FileSystem hdfs = FileSystem.get(conf);

将本地文件拷到HDFS中 http://www.linuxidc.com/Linux/2013-05/83866.htm

1、单步追踪client端的代码:

从HDFS下载文件到本地 http://www.linuxidc.com/Linux/2012-11/74214.htm

要得到一个专用于本地文件系统的FileSystem对象:

从HDFS下载文件到本地 http://www.linuxidc.com/Linux/2012-11/74214.htm

可以看到一开始当get一个FileSystem类的实例的时候,最终会根据我们提供的uri和conf 创建了一个DistributedFileSystem的实例对象,并完成了初始化的过程,初始化函数主要是完成了RPCNamenode和namenode的创建,而这两个变量都是ClientProtocol类型的,ClientProtocol本质上是一个接口,最终完成的是RPC操作。

将本地文件上传至HDFS http://www.linuxidc.com/Linux/2012-11/74213.htm

FileSystem local = FileSystem.getLocal(conf);

将本地文件上传至HDFS http://www.linuxidc.com/Linux/2012-11/74213.htm

  1. private static ClientProtocol createRPCNamenode(InetSocketAddress nameNodeAddr,  
  2.     Configuration conf, UserGroupInformation ugi)   
  3.   throws IOException {  
  4.   return (ClientProtocol)RPC.getProxy(ClientProtocol.class,  
  5.       ClientProtocol.versionID, nameNodeAddr, ugi, conf,  
  6.       NetUtils.getSocketFactory(conf, ClientProtocol.class));  
  7. }  

本文由巴黎人游戏官网发布于软件开发,转载请注明出处:相关阅读,也可以采用HDFS的API来读取

关键词: 巴黎人游戏