获取虚拟机的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(); } }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论