基于JavaAPI对远程hdfs的操作
基于JavaAPI对hdfs的操作
通过Java API来访问HDFS,首先介绍HDFS中的文件操作主要涉及的几个类。
·Configuration类:该类的对象封装了客户端或者服务器的配置。
·FileSystem类:该类的对象是一个文件系统对象,可以用该对象的一些方法对文件进行操作。FileSystem fs=FileSystem.get(conf);通过FileSystem的静态方法get获得该对象。
·FSDataInputStream和FSDataOutputStream:这两个类是HDFS中的输入/输出流,分别通过FileSystem的open方法和create方法获得。
接下来通过实例介绍如何利用Java API进行文件夹的创建、文件列表显示、文件上传和文件下载操作,为了使读者对实例具有完整性的理解,我们把主函数也列了出来。实例代码如下:
//需要的包 import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class HdfsDemo1 { public static void main(String[] args) { createFolder();//文件的创建 uploadFile();//文件上传 downloadFile();//文件下载 listFile(new Path("/");//递归显示文件夹 } }
1.创建文件夹
如果想要将文件放入不同的文件夹中,则可以有针对性地动态创建文件夹。关于文件夹的创建比较简单。代码如下:
//1.创建文件夹 public static void createFolder() { //定义一个配置对象 Configuration conf = new Configuration(); try { //通过配置信息得到文件系统的对象 FileSystem fs = FileSystem.get(new URI("hdfs://192.168.10.11:9000"),conf,"root"); //在指定的路径下创建文件夹 Path path = new Path("/javaAddFolder1"); System.out.println(fs.mkdirs(path)); fs.close(); } catch (Exception e) { e.printStackTrace(); } }
2.递归显示文件
//2.递归显示文件 public static void listFile(Path path){ //定义个配置对象 Configuration conf = new Configuration(); try { //通过配置信息得到文件系统的对象 FileSystem fs = FileSystem.get(new URI("hdfs://192.168.10.11:9000"), conf, "root"); //传入路径,表示显示某个路径下的文件夹列表 //将给定路径下所有的文件元数据放到一个FileStatus的数组 //FileStatus对象封装了文件和目录的元数据,包括文件长度、块大小、权限等 FileStatus[] fileStatuses = fs.listStatus(path); for (int i= 0 ; i<fileStatuses.length;i++){ FileStatus fileStatus = fileStatuses[i]; //首先检测当前是否是文件夹,如果是则进行递归 if(fileStatus.isDirectory()){ System.out.println("当前路径是: "+fileStatus.getPath()); listFile(fileStatus.getPath()); } else { System.out.println("当前路径是:"+fileStatus.getPath()); } } } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } catch (URISyntaxException e) { e.printStackTrace(); } }
3.文件上传
//3.文件上传 public static void uploadFile(){ //定义个配置对象 Configuration conf = new Configuration(); try { //通过配置信息得到文件系统的对象 FileSystem fs = FileSystem.get(new URI("hdfs://192.168.10.11:9000"), conf, "root"); //定义文件的路径和上传的路径 Path src = new Path("D://kmeans_data.txt"); Path dest = new Path("/"); //从本地上传到文件服务器上 fs.copyFromLocalFile(src,dest); fs.close(); } catch (Exception e) { e.printStackTrace(); } }
4.文件下载
//4.文件下载 public static void downloadFile(){ //定义配置对象 Configuration conf = new Configuration(); try { //通过配置文件加载文件系统对象 FileSystem fs = FileSystem.get(new URI("hdfs://192.168.10.11:9000"), conf, "root"); //定义下文文件的路径和本地下载路径 Path src = new Path("/kmeans_data.txt"); Path dest = new Path("F://"); //下载文件到本地 fs.copyToLocalFile(src,dest); } catch (Exception e) { e.printStackTrace(); } }
author@nohert