利用Hadoop API使用Java开发程序学习-文件夹操作
CSDN话题挑战赛第2期
参赛话题:大数据学习成长记录
学习目标:
-
熟悉Java开发
-
掌握Hadoop API操作创建文件夹和删除文件夹的方式
软件版本信息
工具名称 | 说明 |
---|---|
VMware-workstation-full-15.5.1-15018445.exe | 虚拟机安装包 |
MobaXterm_Portable_v20.3.zip | 解压使用,远程连接Centos系统远程访问使用,支持登录和上传文件 |
CentOS-7-x86_64-DVD-1511.iso | Centos7系统ISO镜像,不需要解压,VMware安装时需要 |
jdk-8u171-linuxx64.tar.gz | jdk安装包,上传到Centos系统中使用 |
hadoop-2.7.3.tar.gz | hadoop的安装包,需要上传到虚拟机中 |
apache-flume-1.7.0-bin.tar.gz | 安装包,上传到Centos系统中使用 |
zeppelin-0.10.1-bin-all.tar.gz | 安装包,上传到Centos系统中使用 |
zookeeper-3.4.5.tar.gz | 安装包,上传到Centos系统中使用 |
apache-hive-2.3.9-bin.tar.gz | 安装包,上传到Centos系统中使用 |
前言/背景
Hadoop学习时,通常大家使用的都是shell命令操作hdfs系统,但实际到程序开发时,通过Java开发程序对hdfs文件系统操作的需求会更多,更能增加程序的稳定性、提高运行效率,方便管理。因此学习利用Hadoop API接口,开发Java程序在hdfs上创建和删除目录。
IDEA-community开发Java
掌握通过IDEA开发Java程序
1,创建新的Maven项目
根据提示完成项目创建
2,配置pom.xml文件
<?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>cn.com.lh</groupId>
<artifactId>GUNBigdata</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-common</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<!-- <verbal>true</verbal>-->
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<minimizeJar>true</minimizeJar>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
3,开发在hdfs上创建目录代码
package hdfs;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
/**
* @Classname bigdata204hdfsdemo002
* @Description hdfs创建文件夹
* @Date 2022/9/21 8:54
* @Created by Tiger_Li
*/
public class bigdata204hdfsdemo002 {
/**
* shell : hdfs dfs -mkdir /Java/bigdata2040921
* 思路:
* 1. 创建Configuration对象,并制定HDFS的namenode
* 2. 创建FileSystem对象fs
* 3. fs创建目录
* 4. 关闭对象
*/
public static void main(String[] args) throws URISyntaxException, IOException, InterruptedException {
// 1. 导入的configuration版本要与集群的一致, 配置hdfs地址
Configuration conf = new Configuration();
URI uri = new URI("hdfs://node1:9000");
// 2. 创建fs对象
FileSystem fs = FileSystem.get(uri, conf, "root");
// 3. 创建文件夹
boolean rs = fs.mkdirs(new Path("/Java/bigdata204"));
if (rs){
System.out.println("HDFS上成功创建/Java/bigdata204");
return;
} else {
System.out.println("创建失败");}
// 4. 关闭文件对象
fs.close();
}
}
注意填写的hdfs namenode地址要是active状态,不能为standby状态的。
4,开发在hdfs上删除目录代码
package hdfs;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.IOException;
/**
* @Classname bigdata204hdfsdeletedir
* @Description 删除hdfs上的文件夹
* @Date 2022/9/21 9:29
* @Created by Tiger_Li
*/
public class bigdata204hdfsdeletedir {
/**
* hadoop fs -rm -r /Java/bigdata204
* 思路
* 1. 创建Configuration对象,并制定HDFS的namenode
* 2. 创建FileSystem对象fs
* 3. fs删除目录
* 4. 关闭对象
*/
public static void main(String[] args) throws IOException {
Configuration conf = new Configuration();
conf.set("fs.defaultFS","hdfs://node1:9000");
FileSystem fs = FileSystem.get(conf);
boolean rs = fs.deleteOnExit(new Path("/Java/bigdata204"));
if (rs ){
System.out.println("文件夹删除成功");
return;
} else {
System.out.println("文件夹删除失败");
}
fs.close();
}
}
运行代码前检测集群hdfs
运行删除hdfs文件目录后
运行创建hdfs文件目录
个人经验总结
用Java开发IDEA时,导入依赖时,要注意hadoop版本与集群的hadoop版本一直,由于一直是多hadoop版本开发,idea中会有多个版本的导入提示,导入hadoop版本不一致,会引发各种问题,尤其需要注意。
寄语
希望能坚持学习,坚持进步。