写点什么

HDFS 的 Java API

发布于: 2021 年 04 月 28 日

涉及的主要类

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


  • Configuration

  • 该类的对象封转了客户端或者服务器的配置

  • FileSystem

  • 该类的对象是一个文件系统对象, 可以用该对象的一些方法来对文件进行操作, 通过 FileSystem 的静态方法 get 获得该对象


FileSystem fs = FileSystem.get(conf)


  • get 方法从 conf 中的一个参数 fs.defaultFS 的配置值判断具体是什么类型的文件系统

  • 如果我们的代码中没有指定 fs.defaultFS, 并且工程 ClassPath 下也没有给定相应的配置, conf 中的默认值就来自于 Hadoop 的 Jar 包中的 core-default.xml

  • 默认值为 file:///, 则获取的不是一个 DistributedFileSystem 的实例, 而是一个本地文件系统的客户端对象

获取 FileSystem 的几种方式

  • 第一种方式


@Test    public void getFileSystem1() throws Exception{
//1. 获取FileSystem Configuration conf = new Configuration(); conf.set("fs.defaultFS","hdfs://node01:8020"); FileSystem fileSystem = FileSystem.get(conf); System.out.println(fileSystem.toString()); }
复制代码


  • 第二种方式


 @Test    public void getFileSystem2() throws Exception{
//1. 获取FileSystem FileSystem fileSystem = FileSystem.get(new URI("hdfs://node01:8020"), new Configuration()); System.out.println(fileSystem); }
复制代码


  • 第三种方式


@Test    public void getFileSystem3() throws Exception{
//1. 获取FileSystem Configuration conf = new Configuration(); conf.set("fs.defaultFS","hdfs://node01:8020"); FileSystem fileSystem = FileSystem.newInstance(conf); System.out.println(fileSystem); }
复制代码


  • 第四种方式


@Test    public void getFileSystem4() throws Exception{
//1. 获取FileSystem FileSystem fileSystem = FileSystem.newInstance(new URI("hdfs://node01:8020"), new Configuration()); System.out.println(fileSystem); }
复制代码

遍历 HDFS 中所有文件

  • 使用 API 遍历

  // 需求1: 遍历hdfs中所有文件    @Test    public void listFilesHDFS() throws Exception{        //1.  获取 fileSystem对象        FileSystem fs = FileSystem.newInstance(new URI("hdfs://node01:8020"), new Configuration());        //2. 执行获取所有的文件        RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);        //3 遍历获取所有的文件        while(listFiles.hasNext()){            LocatedFileStatus fileStatus = listFiles.next();            String path = fileStatus.getPath().toString();            System.out.println(path);        }        //4. 释放资源        fs.close();    }
复制代码

HDFS 上创建文件夹

   //需求2: 在hdfs中创建一个文件夹    @Test    public void mkdirHDFS() throws Exception{        //1. 获取FileSystem对象        Configuration conf = new Configuration();        conf.set("fs.defaultFS","hdfs://node01:8020");        FileSystem fs = FileSystem.newInstance(conf);        //2. 执行操作: 创建文件夹        fs.mkdirs(new Path("/mkdir/test"));        //3. 释放资源        fs.close();    }
复制代码

下载文件

   //需求3: 下载文件:  jdk    @Test    public void downLoadHDFS() throws Exception {        //1. 获取FileSystem对象        FileSystem fs = FileSystem.get(new URI("hdfs://node01:8020"), new Configuration());        //2. 执行下载操作: jdk        fs.copyToLocalFile(new Path("/jdk-8u144-linux-x64.tar.gz"),new Path("E:\\HDFS"));        //3. 释放资源        fs.close();    }
复制代码

HDFS 文件上传

 //需求4: 上传文件HDFS中    @Test    public void uploadHDFS() throws Exception{        //1. 获取FileSystem对象        Configuration conf = new Configuration();        conf.set("fs.defaultFS","hdfs://node01:8020");        FileSystem fs = FileSystem.get(conf);        //2. 执行上传 :        fs.copyFromLocalFile(new Path("E:\\HDFS\\jdk-8u144-linux-x64.tar.gz"),new Path("/mkdir/test/"));        //3. 释放资源        fs.close();    }
复制代码


用户头像

专注于大数据技术研究 2020.11.10 加入

运营公众号:五分钟学大数据。大数据领域原创技术号,深入大数据技术

评论

发布
暂无评论
HDFS的Java API