HDFS的接口(命令行接口和Java接口)--笔记

时间:2023-03-09 17:51:33
HDFS的接口(命令行接口和Java接口)--笔记

HDFS 文件的系统访问的接口

1.Hadoop的shell命令脚本





hadoop fs -ls   列出某一个目录下的文件

hadoop fs -lsr 递归的方式列出所有文件





hadoop fs -mkdir 创建目录





hadoop fs -rm   删除文件或者目录

hadoop fs -rmr  删除目录及目录下的所有目录或者文件





hadoop fs -put src /  向hdfs上传文件

hadoop fs -copyFromLocal /src / 





hadoop fs -get /hdfs

hadoop fs -copyToLocal  从hdfs拷贝到本地文件系统





2.hdfs第二种访问接口 Java接口 JavaAPI





1) 通过URL的方式去访问

static{

URL.setFsUrlStreamHandler(new FSUrlStreamHandlerFactory());

}





 try{

  //使得URL具备访问HDFS的工厂能力

 

 //通过URL统一资源定位符,具体的定位到hdfs的某一个具体的资源文件上

  URL url = new URL("hdfs://master:9000/a.txt");

  //通过url的 openStream方法拿到目标hdfs上文件的输入流对象

  FSDataInputStream in = url.openStream();

  FileOutputStream foo = new FileOutputStream("/home/zkpk/a.txt");

  IOUtils.copyBytes(in, foo, 4096, false);

 }catch(Exception e){

 

 }finally{

IOUtils.closeStream(in);

 }





2) FileSystem 来操作hdfs(常用)









Object obj = FileSystem.get()

Object extends FileSystem{



}





Object obj = new Object();

FileSystem fs; 

fs = obj; //把子类对象看成父类对象,向上转型









 //获取hdfs的配置 configuration

 Configuration conf = new Configuration();

 FileSystem fs = FileSystem.get(conf);

           fs = FileSystem.get(URI.create(uri), conf);





  InputStream in = fs.openStream();





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





3) FileStatus (文件的元信息, 文件的名字,路径 is目录......)

  





  FileStatu[] list = fs.listStatus();





  Path[] paths = FileUtils.status2path(list)





  for(Path p : paths){

fs = FileSystem.get(RUI.create(p), conf);

fs.openStream();

  }





4)fs.delete

   fs.mkdir()