目录
[(1)先确认目录结构(Maven 标准目录,必须按这个来)](#(1)先确认目录结构(Maven 标准目录,必须按这个来))
[(2)hdfs java操作代码输入](#(2)hdfs java操作代码输入)
(3)验证pom.xml文件中hadoop依赖是否和linux中hadoop版本一致
[(4)确认 HDFS RPC 地址(关键)](#(4)确认 HDFS RPC 地址(关键))
[二、Windows 本地配置 Hadoop 运行环境(必做,否则报 winutils 缺失)](#二、Windows 本地配置 Hadoop 运行环境(必做,否则报 winutils 缺失))
[(1)下载 Windows 适配 hadoop 二进制包Hadoop3.x 下载对应 win 工具包,解压到无中文路径,例:D:\hadoop-3.x-win](#(1)下载 Windows 适配 hadoop 二进制包Hadoop3.x 下载对应 win 工具包,解压到无中文路径,例:D:\hadoop-3.x-win)
(2)新建系统变量:HADOOP_HOME=D:\hadoop-3.x-win
[(3)Path 新增:%HADOOP_HOME%\bin](#(3)Path 新增:%HADOOP_HOME%\bin)
[(4)重启 IDEA(环境变量生效)](#(4)重启 IDEA(环境变量生效))
[三、虚拟机 Linux 网络 & 防火墙配置](#三、虚拟机 Linux 网络 & 防火墙配置)
[(1)虚拟机网络设置VMware/VirtualBox 网卡改为桥接模式,重启虚拟机,IP 固定为 192.168.17.128](#(1)虚拟机网络设置VMware/VirtualBox 网卡改为桥接模式,重启虚拟机,IP 固定为 192.168.17.128)
[(2) Linux 放行端口bash运行](#(2) Linux 放行端口bash运行)
运行前提
1、windows能ping通虚拟机IP地址【虚拟机网络改为桥接模式,改为固定IP】
2、Linux开放端口:9000,9870,8088【使用windows的 PowerShell,执行:Test-NetConnection IP地址 -Port 9000,需要修改linux中hadoop配置文件hdfs-site.xml和core-site.xml】
3、windows配置Hadoop本地依赖
4、Maven中pom.xml文件中引入和linux中hadoop集群版本一致的hadoop依赖
5、hdfs的RPC地址为:hdfs:ip地址:9000,不用9870网页端口
一、在IDEA的Maven项目中创建MkDirDemo类
(1)先确认目录结构(Maven 标准目录,必须按这个来)
项目根目录
└── src
├── main
│ └── java // 业务代码存放位置(创建Java文件在这里)
└── test
└── java // 单元测试代码存放位置
关键前提
main/java 文件夹必须是蓝色源码根目录,否则右键不会出现 Java Class 选项。
(2)hdfs java操作代码输入
java
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
public class MkdirDemo {
public static FileSystem getFileSystem() throws IOException, URISyntaxException, InterruptedException {
Configuration conf=new Configuration();
URI url=new URI("hdfs://192.168.17.128:9000");
final FileSystem fileSystem=FileSystem.get(url,conf,"root");
return fileSystem;
}
public static void list(String dir) throws Exception{
FileSystem fileSystem=getFileSystem();
FileStatus[] listStatus=fileSystem.listStatus(new Path(dir));
for(FileStatus fileStatus : listStatus){
boolean isDir=fileStatus.isDirectory();
String name=fileStatus.getPath().toString();
System.out.println(isDir+" "+name);
}
}
public static void mkdir(String path) throws Exception{
final FileSystem fileSystem=getFileSystem();
fileSystem.mkdirs(new Path(path));
//遍历文件夹下的内容
list("/");
}
public static void create(String path) throws Exception{
final FileSystem fileSystem=getFileSystem();
fileSystem.create(new Path(path));
//遍历文件夹下的内容
list("/");
}
public static void delete(String path) throws Exception{
final FileSystem fileSystem=getFileSystem();
fileSystem.delete(new Path(path),true);
//遍历文件夹下的内容
list("/");
}
public static void main(String[] args) throws Exception{
mkdir("/bigdata");
// delete("bigdata");
// create("demo.txt");
}
}
(3)验证pom.xml文件中hadoop依赖是否和linux中hadoop版本一致
在linux中查看hadoop版本
bash
hadoop version

修改Maven项目中pom.xml中的hadoop依赖版本与其一致,并更新Maven

(4)确认 HDFS RPC 地址(关键)
Linux 执行查看代码连接地址:
hdfs getconf -confKey fs.defaultFS
输出应为 hdfs://192.168.17.128:9000
二、Windows 本地配置 Hadoop 运行环境(必做,否则报 winutils 缺失)
(1)下载 Windows 适配 hadoop 二进制包Hadoop3.x 下载对应 win 工具包,解压到无中文路径,例:D:\hadoop-3.x-win

内部 bin 文件夹包含 winutils.exe、hadoop.dll2.2 Windows 系统环境变量配置
(2)新建系统变量:HADOOP_HOME=D:\hadoop-3.x-win

(3)Path 新增:%HADOOP_HOME%\bin

(4)重启 IDEA(环境变量生效)
三、虚拟机 Linux 网络 & 防火墙配置
(1)虚拟机网络设置VMware/VirtualBox 网卡改为桥接模式,重启虚拟机,IP 固定为 192.168.17.128

linux中查看虚拟IP:
bash
ip addr

Windows CMD 测试连通:ping 192.168.17.128

(2) Linux 放行端口bash运行
(1) 永久开放RPC 9000、网页9870、YARN8088
firewall-cmd --add-port=9000/tcp --permanent
firewall-cmd --add-port=9870/tcp --permanent
firewall-cmd --add-port=8088/tcp --permanent
firewall-cmd --reload
查看开放端口
firewall-cmd --list-ports
测试时:可以直接关闭防火墙systemctl stop firewalld
(2)修复hadoop配置【可以解决windows中ping通虚拟机IP地址访问9000端口】
进入 hadoop 配置目录
cd $HADOOP_HOME/etc/hadoop
修改配置一:vim hdfs-site.xml,添加下面配置,让 NameNode 监听全部网卡
<property>
<name>dfs.namenode.rpc-bind-host</name>
<value>0.0.0.0</value>
</property>
修改配置二: core-site.xml
错误写法(仅本地访问):
<value>hdfs://localhost:9000</value>
正确写法(绑定虚拟机实际 IP):
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.17.128:9000</value>
</property>
第三步:重启 Hadoop 集群生效
第四步:启动完再次执行 netstat -tlnp | grep 9000,确认 Local Address 变为 0.0.0.0:9000。
tcp 0 0 0.0.0.0:9000 0.0.0.0:* LISTEN 1234/java【正确】
0.0.0.0:9000 = 监听所有网卡,Windows 可以连接。
tcp 0 127.0.0.1:9000 0.0.0.0:* LISTEN 1234/java【错误】
127.0.0.1:9000 = 仅本机 Linux 内部能访问,Windows 远程直接拒绝连接。

最后验证端口是否通:
windows中 PowerShell 端口检测工具(比 curl 更直观)
Win+X 打开 PowerShell,执行:
Test-NetConnection 192.168.17.128 -Port 9000
返回 TcpTestSucceeded: False = 端口被拒绝;True = 端口正常

四、执行

执行结果如下图所示:
