当前位置: 代码网 > it编程>编程语言>Java > Win10 IDEA如何连接虚拟机中的Hadoop(HDFS)

Win10 IDEA如何连接虚拟机中的Hadoop(HDFS)

2024年11月08日 Java 我要评论
获取虚拟机的ip虚拟机终端输入ip a关闭虚拟机防火墙sudo ufw disable修改hadoop的core-site.xml文件将localhost修改为虚拟机局域网ip# 位置可能不一样,和h

获取虚拟机的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();
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com