Hadoop: 主节点9000端口拒绝访问Call From *** to hadoop1:9000 failed on connection exception
今天在使用Java联调试hdfs的时候,参数都对了,但是就是连接不上hadoop,后面找到原因了。是自己的hadoop配置文件错误, 在配置hadoop:core-site.xml 文件时,主要 hdfs地址要写成服务器的IP地址,不要写成localhost获取127.0.0.0以下是我的部分代码public static FileSystem getFileSystem(Map<Strin
·
今天在使用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端口无法访问的问题;
更多推荐
已为社区贡献1条内容
所有评论(0)