zoukankan      html  css  js  c++  java
  • HDFS Java 客户端 API

    1. 概述

    • HDFS在生产应用中主要是Java客户端的开发,其核心步骤是从HDFS提供的API中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS上的文件。

    2. 客户端核心类

    • Configuration 配置对象类,用于加载或设置参数属性
    • FileSystem 文件系统对象基类。针对不同文件系统有不同具体实现。该类封装了文件系统的相关操作方法。

    3. IDEA创建工程项目

    • 创建一个Maven项目
      在这里插入图片描述
    • 添加maven依赖和编译打包插件

    4. 添加maven依赖和编译打包插件

    <dependencies>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-common</artifactId>
                <version>3.1.4</version>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-client</artifactId>
                <version>3.1.4</version>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-hdfs</artifactId>
                <version>3.1.4</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.13</version>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    

    5. 创建Junit单元测试

    package com.xdr630.hdfs;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileSystem;
    import org.junit.After;
    import org.junit.Before;
    
    import java.io.IOException;
    
    /**
     * @author xdr630
     * @version 1.0
     * @date 2021/4/5 21:51
     */
    public class HDFSClientTest {
        private static Configuration conf = null;
        private static FileSystem fs = null;
    
        /**
         * 初始化方法 用于和hdfs集群建立连接
         *
         * @throws IOException
         */
        @Before
        public void connect2HDFS() throws IOException {
            //创建配置对象实例
            Configuration conf = new Configuration();
            //设置操作的文件系统是 HDFS ,并且指定HDFS操作地址,在/export/servers/hadoop-2.7.4/etc/hadoop/ 下的core-site.xml
            conf.set("fs.defaultFS","hdfs://hadoop01:9000");
            //创建FileSystem对象
            fs = FileSystem.get(conf);
        }
    
        /**
         * 关闭客户端和hdfs连接
         * @throws IOException
         */
        @After
        public void close(){
            //首先判断文件系统实例是否为null,如果不为null,进行关闭
            if (fs!=null){
                try {
                    fs.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    

    6. 创建文件夹

     /**
         * 创建文件夹操作
         *
         */
        @Test
        public void mkdir() throws IOException {
            //首先判断文件夹是否存在,如果不存在再创建
            if(!fs.exists(new Path("/xdr630"))){
                //创建文件夹
                fs.mkdirs(new Path("/xdr630"));
            }
        }
    

    7. 执行报错:客户端没有权限

    在这里插入图片描述

    • 原因:以Windows登录用户访问HDFS,而该用户不具备在HDFS操作权限
    • 解决
      1、修改HDFS文件系统权限
      2、或者设置客户端身份,该身份具备在HDFS操作权限
    @Before
        public void connect2HDFS() throws IOException {
            //设置客户端身份信息,以备在hdfs上进行操作
            System.setProperty("HADOOP_USER_NAME","root");
            //创建配置对象实例
             conf = new Configuration();
            //设置操作的文件系统是 HDFS ,并且指定HDFS操作地址,在/export/servers/hadoop-2.7.4/etc/hadoop/ 下的core-site.xml
            conf.set("fs.defaultFS","hdfs://192.168.121.134:9000");
            //创建FileSystem对象
            fs = FileSystem.get(conf);
        }
    
    • core-site.xml
      在这里插入图片描述

    8. 创建文件夹完整代码

    package com.xdr630.hdfs;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.io.IOException;
    
    /**
     * @author xdr630
     * @version 1.0
     * @date 2021/4/5 21:51
     */
    public class HDFSClientTest {
        private static Configuration conf = null;
        private static FileSystem fs = null;
    
        /**
         * 初始化方法 用于和hdfs集群建立连接
         *
         * @throws IOException
         */
        @Before
        public void connect2HDFS() throws IOException {
            //设置客户端身份信息,以备在hdfs上进行操作
            System.setProperty("HADOOP_USER_NAME","root");
            //创建配置对象实例
             conf = new Configuration();
            //设置操作的文件系统是 HDFS ,并且指定HDFS操作地址,在/export/servers/hadoop-2.7.4/etc/hadoop/ 下的core-site.xml
            conf.set("fs.defaultFS","hdfs://192.168.121.134:9000");
            //创建FileSystem对象
            fs = FileSystem.get(conf);
        }
        /**
         * 创建文件夹操作
         *
         */
        @Test
        public void mkdir() throws IOException {
            //首先判断文件夹是否存在,如果不存在再创建
            if(!fs.exists(new Path("/xdr630"))){
                //创建文件夹
                fs.mkdirs(new Path("/xdr630"));
            }
        }
        /**
         * 关闭客户端和hdfs连接
         * @throws IOException
         */
        @After
        public void close(){
            //首先判断文件系统实例是否为null,如果不为null,进行关闭
            if (fs!=null){
                try {
                    fs.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    • 执行 @test 后 :
      在这里插入图片描述

    9. 上传文件

    /**
     * 上传文件
     */
    	@Test
    	public void  putFile2HDFS() throws IOException {
    	    //创建本地文件路径
    	    Path src = new Path("D:/input/xdr01.txt");
    	    // hdfs上传路径
    	    Path dst = new Path("/xdr630/xdr01.txt");
    	    //文件上传(local->hdfs)
    	    fs.copyFromLocalFile(src,dst);
    	}
    

    在这里插入图片描述

    在这里插入图片描述

    10. 下载文件

      /**
       * 下载文件
       */
      @Test
      public void  getFile2Local() throws IOException {
          //hdfs路径
          Path src = new Path("/xdr630/xdr01.txt");
          // 本地路径
          Path dst = new Path("E:/xdr01.txt");
          //文件下载(hdfs->local)
         fs.copyToLocalFile(src,dst);
      }
    

    在这里插入图片描述

    本文来自博客园,作者:兮动人,转载请注明原文链接:https://www.cnblogs.com/xdr630/p/15254724.html

  • 相关阅读:
    SQL序列键
    SQL日期跟时间值序列
    springboot日志配置
    weblogic10补丁升级与卸载
    idea使用svn报错
    mybatis插入数据并返回主键(oracle)
    UTF-8格式txt文件读取字节前三位问题
    https连接器
    git将本地项目上传码云
    aop的使用
  • 原文地址:https://www.cnblogs.com/xdr630/p/15254724.html
Copyright © 2011-2022 走看看