HDFS javaAPI-windows的IDEA中java文件在linux中的hadoop平台运行

HDFS javaAPI-windows的IDEA中java文件在linux中的hadoop平台运行 运行前提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 选项。2hdfs 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 confnew Configuration(); URI urlnew URI(hdfs://192.168.17.128:9000); final FileSystem fileSystemFileSystem.get(url,conf,root); return fileSystem; } public static void list(String dir) throws Exception{ FileSystem fileSystemgetFileSystem(); FileStatus[] listStatusfileSystem.listStatus(new Path(dir)); for(FileStatus fileStatus : listStatus){ boolean isDirfileStatus.isDirectory(); String namefileStatus.getPath().toString(); System.out.println(isDir name); } } public static void mkdir(String path) throws Exception{ final FileSystem fileSystemgetFileSystem(); fileSystem.mkdirs(new Path(path)); //遍历文件夹下的内容 list(/); } public static void create(String path) throws Exception{ final FileSystem fileSystemgetFileSystem(); fileSystem.create(new Path(path)); //遍历文件夹下的内容 list(/); } public static void delete(String path) throws Exception{ final FileSystem fileSystemgetFileSystem(); 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版本hadoop version修改Maven项目中pom.xml中的hadoop依赖版本与其一致并更新Maven4确认 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_HOMED:\hadoop-3.x-win3Path 新增%HADOOP_HOME%\bin4重启 IDEA环境变量生效三、虚拟机 Linux 网络 防火墙配置1虚拟机网络设置VMware/VirtualBox 网卡改为桥接模式重启虚拟机IP 固定为 192.168.17.128linux中查看虚拟IPip addrWindows CMD 测试连通ping 192.168.17.1282 Linux 放行端口bash运行1 永久开放RPC 9000、网页9870、YARN8088firewall-cmd --add-port9000/tcp --permanentfirewall-cmd --add-port9870/tcp --permanentfirewall-cmd --add-port8088/tcp --permanentfirewall-cmd --reload# 查看开放端口firewall-cmd --list-ports测试时可以直接关闭防火墙systemctl stop firewalld2修复hadoop配置【可以解决windows中ping通虚拟机IP地址访问9000端口】进入 hadoop 配置目录cd $HADOOP_HOME/etc/hadoop修改配置一vim hdfs-site.xml添加下面配置让 NameNode 监听全部网卡propertynamedfs.namenode.rpc-bind-host/namevalue0.0.0.0/value/property修改配置二 core-site.xml错误写法仅本地访问valuehdfs://localhost:9000/value正确写法绑定虚拟机实际 IPpropertynamefs.defaultFS/namevaluehdfs://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 更直观WinX 打开 PowerShell执行Test-NetConnection 192.168.17.128 -Port 9000返回 TcpTestSucceeded: False 端口被拒绝True 端口正常四、执行执行结果如下图所示