HDFS的JAVA API 操作

HDFS的JAVA API 操作

1.1 构建开发环境:

配置相应的java包(这里用的是IntelliJ IDEA)
在这里插入图片描述

1.2 构造客户端对象

在Java中操作HDFS,主要涉及以下Class:

Configuration: 该类的对象封装了客户端或者服务器的配置;

FileSystem: 该类的对象是一个文件系统对象,可以用该对象的一些方法来对•文件进行操作,通过FileSystem的静态方法get获取该对象。
    FileSystem fs = FileSystem.get(conf)      这里的conf就是Configuration
    Get方法从conf中的一个参数 fs.defaultFS的配置值判断具体是什么类型的文件系统,如果我们代码中没有指定的fs.defaultFS,并且工程classpath下也没有给定的现应配置,conf中默认值就是来自hadoop的jar包中的core-default.xml,默认值为: file:/// ,则获取的将不是一个DistributedFileSystem的实例,而是一个本地文件系统的客户端对象。

1.3 示例代码

创建一个类来实现文件上传和下载:


public class Test{
   public static void main(String[] args) throws Exception{
      Configuration conf=new Configuration();
      //这里指定的是使用的hdfs文件系统,hadoop-1是你集群的名称或者ip地址
      conf.set("fs.defaultFS","hdfs://hadoop-1:9000")

      //通过如下的方式进行客户端身份的设置,这里转换为root身份来执行,因为其他用户可能没有执行的权限。
      System.setyProperty("HADOOP_USER_NAME","root");

//通过FileSystem的静态方法获取文件系统客户端对象
FileSystem fs =FileSysytem.get(conf);

//也可以通过如下方式去指定文件的类型,同时设置用户的身份。
//FileSystem fs= FileSystem.get(new URI("hdfs://hadoop-1:9000"),conf,"root");

//创建一个目录:
fs.create(new Path("/fujiashi"),false);

//上传一个文件到Windows上
fs.copyFromLocalFile(new Path("d:/fujiashi.sh"),new Path("/fujiashi-ha"));


//使用Stream的形式 操作HDFS 更底层的方式

//上传到hdfs
FSDataOutputStream outputStream=fs.create(new Path("/fujiashi.txt"),true);
//复制我D盘下的文件fujiashi.txt 上传到集群上
FileInputStream inputStream =new FileInputStream("D:\\fujiashi.txt")

IOUtils.copy(inputStream,outputStream);

//关闭我们的文件系统
fs.close();
      
  }
}

猜你喜欢

转载自blog.csdn.net/weixin_44001568/article/details/106041271