Win10 IDEA如何连接虚拟机中的Hadoop(HDFS)
更新时间:2024年11月07日 11:06:01 作者:CY耶
在虚拟机上配置Hadoop并修改core-site.xml文件,设置IP为局域网地址,IDEA中创建Maven项目,添加依赖,并检查Hadoop重启和端口转发,提供test.bat文件,通过修改IP简化使用过程
获取虚拟机的ip
虚拟机终端输入
ip a
关闭虚拟机防火墙
sudo ufw disable
修改Hadoop的core-site.xml文件
将localhost
修改为虚拟机局域网IP
# 位置可能不一样,和Hadoop安装位置有关 cd /usr/local/hadoop/etc/hadoop vim core-site.xml
重启Hadoop
cd /usr/local/hadoop/ #目录可能不一样,修改成自己的目录 ./sbin/stop-dfs.sh # 关闭hadoop ./sbin/start-dfs.sh #启动hadoop jps # 判断是否启动成功
IDEA连接
创建Maven项目
IDEA自带Maven,如果需要自己安装Maven可以参考Maven安装教程
创建项目,选择Maven,模板选择第一个maven-archetype-archetype
添加依赖(pom.xml)
记得修改自己hadoop
的版本,我的是3.3.5
设置好后Reload
一下
<properties> <hadoop.version>3.3.5</hadoop.version> </properties> <dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>${hadoop.version}</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>${hadoop.version}</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>${hadoop.version}</version> </dependency> </dependencies>
设置好后Reload
一下 ,然后等下载好
创建Java文件并运行
出现错误请先检查Hadoop是否重启
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import java.io.IOException; public class Test01 { public static void main(String[] args) throws IOException { Configuration conf = new Configuration(); // 设置用户名(一定要,不然默认用户名是win的用户名) System.setProperty("HADOOP_USER_NAME","hadoop"); // IP地址修改成虚拟机的ip conf.set("fs.defaultFS","hdfs://192.168.111.131:9000"); conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem"); FileSystem fs = FileSystem.get(conf); RemoteIterator<LocatedFileStatus> files = fs.listFiles(new Path("/"), true); while (files.hasNext()) { FileStatus fileStatus = files.next(); System.out.println(fileStatus.getPath().toString()); } fs.close(); //关闭hdfs } }
端口转发
完成到这里已经可以用啦,不过可能不太方便
可以设置将win10的端口转发
实现在代码中直接访问localhost
创建test.bat
文件后输入以下代码
将IP
修改成虚拟机的IP
双击运行
@REM 设置IP SET BigDataLANIP=192.168.111.131 @REM 设置命令以管理员身份运行 %1 start "" mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit @REM 清空所有转发规则 netsh interface portproxy reset @REM 转发9000 netsh interface portproxy add v4tov4 listenport=9000 connectport=9000 connectaddress=%BigDataLANIP% @REM 转发9870(HDFS的web管理界面) netsh interface portproxy add v4tov4 listenport=9870 connectport=9870 connectaddress=%BigDataLANIP% echo "succeed" timeout /t 5 /nobreak >nul
简单使用
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Test02 { public static void main(String[] args) throws IOException { Configuration conf = new Configuration(); // 设置用户名(一定要,不然默认用户名是win的用户名) System.setProperty("HADOOP_USER_NAME","hadoop"); conf.set("fs.defaultFS","hdfs://localhost:9000"); conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem"); // 列出根目录下的所有文件和文件夹 FileSystem fs = FileSystem.get(conf); Path file = new Path("/"); FileStatus[] fileStatuses = fs.listStatus(file); for (FileStatus fileStatus : fileStatuses){ System.out.println(fileStatus.getPath()); } // 创建一个新的文件 test.txt 在HDFS的 /user/hadoop/test 目录下(如果目录不存在,则先创建目录)。 Path dirPath = new Path("/user/hadoop/test"); if(!fs.exists(dirPath)){ fs.mkdirs(dirPath); } Path remotePath = new Path("/user/hadoop/test/test.txt"); FSDataOutputStream outputStream = fs.create(remotePath); outputStream.close(); // 向 test.txt 文件中写入一段指定的文本内容(如“Hello, HDFS!”)。 FSDataOutputStream outputStream2 = fs.create(remotePath); String s = "Hello, HDFS!"; outputStream2.write(s.getBytes()); outputStream2.close(); // 读取 test.txt 文件的内容,并打印到控制台。 FSDataInputStream inputStream = fs.open(remotePath); BufferedReader d = new BufferedReader(new InputStreamReader(inputStream)); String line = null; while ((line = d.readLine()) != null) System.out.println(line); // 关闭与HDFS的连接。 fs.close(); } }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Spring Boot 使用 SSE 方式向前端推送数据详解
这篇文章主要介绍了Spring Boot 使用SSE方式向前端推送数据详解,SSE简单的来说就是服务器主动向前端推送数据的一种技术,它是单向的,也就是说前端是不能向服务器发送数据的2022-08-08Java中避免NullPointerException的方法总结
这篇文章主要介绍了Java中避免NullPointerException的方法总结的相关资料,需要的朋友可以参考下2017-07-07
最新评论