AWS上Hadoop集群配置问题:无法分配请求地址/连接异常失败
排查AWS上Hadoop集群NameNode端口不可访问&SecondaryNameNode启动失败问题
先梳理下你的现状:DataNode的50075端口能正常访问,说明DataNode服务和基础网络(安全组、节点网络)没问题,但NameNode的50070端口连不上,同时部署在同节点的SecondaryNameNode启动失败——这俩问题大概率是关联的,咱们一步步来排查:
第一步:先确认NameNode服务是否真的在运行
SSH到你的主NameNode节点,执行jps命令,看看输出里有没有NameNode这个进程:
- 如果没有NameNode进程:那核心问题是NameNode没启动起来,SecondaryNameNode依赖NameNode的元数据服务,自然也启动失败。这种情况直接去看NameNode的核心日志(路径一般是
$HADOOP_HOME/logs/hadoop-*-namenode-*.log),重点找ERROR级别的信息——常见的坑包括:- fsimage或edits日志文件损坏(可以尝试用
hdfs namenode -recover命令修复) - NameNode的存储目录(
dfs.namenode.name.dir配置的路径)权限不对,或者目录不存在(给对应的目录授权chown -R hadoop:hadoop /path/to/namenode/dir) - core-site.xml或hdfs-site.xml里的配置写错了(比如
fs.defaultFS填错了NameNode地址)
- fsimage或edits日志文件损坏(可以尝试用
- 如果有NameNode进程:那问题可能出在端口绑定、网络层面,继续往下查。
第二步:排查NameNode 50070端口的访问问题
先测本地访问
在NameNode节点上执行curl localhost:50070,如果能返回Hadoop的WebUI HTML内容,说明服务本身没问题,问题出在外部网络:
- 检查AWS安全组:确保NameNode节点的安全组入站规则开放了50070端口,允许你的访问IP(或者临时用0.0.0.0/0测试)
- 检查节点防火墙:如果EC2节点开了iptables或firewalld,要添加规则允许50070端口通行,比如
firewall-cmd --add-port=50070/tcp --permanent && firewall-cmd --reload - 检查NameNode的端口绑定配置:打开hdfs-site.xml,确认
dfs.namenode.http-address配置的是0.0.0.0:50070或者节点的公网/内网IP:50070,如果绑定的是localhost:50070,那外部肯定访问不了
如果本地curl都失败,那还是NameNode的配置或服务本身有问题,回到第一步的日志排查。
第三步:解决SecondaryNameNode启动失败的问题
因为你把它部署在NameNode节点上,先看它的日志($HADOOP_HOME/logs/hadoop-*-secondarynamenode-*.log和对应的.out文件),重点抓关键报错:
- 常见报错1:
Connection refused to namenode——这说明SecondaryNameNode连不上NameNode的RPC端口,检查core-site.xml里的fs.defaultFS是否正确指向NameNode的RPC地址(默认是hdfs://namenode-host:8020或9000),同时确认NameNode的RPC端口在安全组/防火墙里是允许本地访问的 - 常见报错2:权限或目录不存在——检查hdfs-site.xml里的
dfs.namenode.checkpoint.dir配置的路径,确保这个目录存在,并且Hadoop运行用户(比如hadoop)有读写权限,没有的话手动创建并授权:mkdir -p /path/to/checkpoint && chown -R hadoop:hadoop /path/to/checkpoint - 常见报错3:配置冲突——确认
dfs.namenode.secondary.http-address配置的端口没有被其他进程占用,可以用netstat -tulpn | grep 50090(默认端口)检查
最后提个小建议
如果日志里有具体的报错堆栈信息,把关键部分贴出来,能更快定位问题——比如.log里的ERROR信息,或者.out里的启动失败提示。
内容的提问来源于stack exchange,提问作者franchyze923
相关产品推荐
相关产品推荐

