Hadoop HDFS API客户端配置

121 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情

  •  下载hadoop客户端

github.com/cdarlint/wi…

这里我下载的是3.1.0版本的。下载后解压,将其余版本的安装包删掉,只留下了我需要的3.1.0安装包:

  • 配置环境变量

  •  配置PATH

  • 双击安装包中的winutils

 如果双击的之后是闪了一下,那么说明安装成功,如果是出现下面的报错,则是由于缺少一些运行库。

如果报错,可以参考这篇博客中的解决方法:

blog.csdn.net/QYHuiiQ/art…

  • IDAE中新建project

  •  添加依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.wyh</groupId>
    <artifactId>TestHDFSClient</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.1.3</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.10</version>
        </dependency>
    </dependencies>

</project>
  • 在src/main/resources目录下创建log4j.properties文件
log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
  • 自定义客户端类
package com.wyh.hdfs;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Test;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

public class TestHDFSClient {

    @Test
    public void testMakeDir() throws URISyntaxException, IOException, InterruptedException {
        //NameNode连接地址
        URI  uri = new URI("hdfs://hadoop301:8020");
        //创建配置对象
        Configuration configuration = new Configuration();
        //指定用户,该用户要和HDFS中文件的owner一致才可以访问
        String user = "root";
        //获取文件系统
        FileSystem fileSystem = FileSystem.get(uri, configuration, user);
        //创建文件夹
        fileSystem.mkdirs(new Path("/testmkdir"));
        //关闭资源
        fileSystem.close();
    }


}

运行之后查看HDFS:

 创建成功之后我们可以尝试将刚才的代码进行重构封装:

package com.wyh.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;
import java.net.URI;
import java.net.URISyntaxException;

//执行方法前面的注解表示方法的执行顺序:@Before-----@Test-----@After
public class TestHDFSClient {

    private FileSystem fileSystem;

    @Before
    public void init() throws IOException, InterruptedException, URISyntaxException {
        //NameNode连接地址
        URI  uri = new URI("hdfs://hadoop301:8020");
        //创建配置对象
        Configuration configuration = new Configuration();
        //指定用户,该用户要和HDFS中文件的owner一致才可以访问
        String user = "root";
        //获取文件系统
        fileSystem = FileSystem.get(uri, configuration, user);
    }

    @After
    public void close() throws IOException {
        //关闭资源
        fileSystem.close();
    }

    @Test
    public void testMakeDir() throws IOException {
        //创建文件夹
        fileSystem.mkdirs(new Path("/testmkdir1"));

    }


}

查看HDFS:

 这样就实现了通过API操作HDFS。