今天在使用Java联调试hdfs的时候,参数都对了,但是就是连接不上hadoop,后面找到原因了。

是自己的hadoop配置文件错误, 在配置hadoop:core-site.xml 文件时,主要 hdfs地址要写成服务器的IP地址,不要写成localhost获取127.0.0.0

以下是我的部分代码

    public static FileSystem getFileSystem(Map<String, Object> params, String userName) throws Exception{
        Configuration conf = new Configuration();
        Object value = params.get(PARAM_HADOOP_CONF_LIST);
        if(value instanceof Map){
            Map listItem = (Map)value;
            listItem.forEach((k, v) -> conf.set(String.valueOf(k), String.valueOf(v)));
        }
        configuration(conf, params);
        // 客户端访问身份
        if(StringUtils.isBlank(userName)){

            // 这个改造一下 获取环境变量中配置的数据,如果没有再获取当前系统的用户名
//            System.setProperty("HADOOP_USER_NAME", "hadoop");
//            userName = System.getenv("HADOOP_USER_NAME");
            if(StringUtils.isBlank(userName)){
                // 获取系统用户的账户名称,需要获取有权限操作hdfs的用户
                userName = System.getProperty("user.name", "");
            }

        }
        UserGroupInformation ugi = UserGroupInformationWrapper.createRemoteUser(conf, userName);
        return ugi.doAs((PrivilegedExceptionAction<FileSystem>) () ->{
            FileSystem f = FileSystem.get(conf);
            // 这里做验证功能,如果存在该路径,证明可以访问到hdfs

			// 但是这里面一直报错
            f.exists(new Path("/"));
            return f;
        });
    }

一直提示:主节点9000端口拒绝访问Call From *** to hadoop1:9000 failed on connection exception

报错原因:

  • 防火墙没有关闭
  • 主节点9000端口没有打开
  • 主节点9000端口打开了,但是不允许远程访问(一般是这个)

解决方案:

  • 关闭集群服务
sh $HADOOP_HOME/sbin/stop-all.sh
  • 查看本地IP
ifconfig // 找到本机的IP地址
  • 配置主机host
    在这里插入图片描述

如果配置 /etc/hosts,出现下列红框的内容,可以去掉,重新保存,

如果重启后又出现了改数据,关闭NetworkManager服务即可,该服务会自动修改hosts文件,添加上图标红的两行。

service  NetworkManager stop
chkconfig NetworkManager off

在这里插入图片描述


  • 配置 core-site.xml
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop1:9000</value>
</property>

需保证fs.defaultFS值使用的是主机名称或者IP地址,不能使用localhost或者127.0.0.1。

  • 关闭防火墙
service iptables stop
chkconfig iptables off
  • 关闭NetworkManager服务
service  NetworkManager stop
chkconfig NetworkManager off
  • 重启hadoop
sh $HADOOP_HOME/sbin/start-all.sh

测试

  • netstat -tlpn 检查主节点9000端口是否打开,且允许远程访问
  • telnet ip port 看能不能访问

以上操作基本能解决hdfs端口无法访问的问题;

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐