携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情
- 下载hadoop客户端
这里我下载的是3.1.0版本的。下载后解压,将其余版本的安装包删掉,只留下了我需要的3.1.0安装包:
- 配置环境变量
- 配置PATH
- 双击安装包中的winutils
如果双击的之后是闪了一下,那么说明安装成功,如果是出现下面的报错,则是由于缺少一些运行库。
如果报错,可以参考这篇博客中的解决方法:
- 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。