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