Hadoop 启动之后,datanode启动错误的问题解决--报 java.net.BindException

本文解决了一个Hadoop集群中datanode启动失败的问题,原因是配置文件hdfs-site.xml中的datanode地址设置错误。通过更正端口绑定地址为0.0.0.0:50010并重启Hadoop,成功解决了datanode启动失败的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      今天中午在hdfs-site.xml文件中添加了一个端口50010,然后重新启动hadoop,之后发现namenode正常启动,但是datanode启动不了。在datanode节点查看日志报错信息如下:

java.net.BindException: Problem binding to [hbase1:50010] java.net.BindException: Cannot assign requested address; For more details see:  http://wiki.apache.org/hadoop/BindException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at org.apache.hadoop.net.NetUtils.wrapWithMessage(NetUtils.java:791)
        at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:720)
        at org.apache.hadoop.ipc.Server.bind(Server.java:424)
        at org.apache.hadoop.ipc.Server.bind(Server.java:396)
        at org.apache.hadoop.hdfs.net.TcpPeerServer.<init>(TcpPeerServer.java:113)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.initDataXceiver(DataNode.java:875)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:1088)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:418)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:2332)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:2219)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:2266)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:2442)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:2466)
Caused by: java.net.BindException: Cannot assign requested address
        at sun.nio.ch.Net.bind0(Native Method)
        at sun.nio.ch.Net.bind(Net.java:433)
        at sun.nio.ch.Net.bind(Net.java:425)
        at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
        at org.apache.hadoop.ipc.Server.bind(Server.java:407)
报java.net.BindException: Problem binding to [hbase1:50010] ,Cannot assign requested address。原来是hbase1:50010不能直接访问。去hdfs-site.xml中查看我设置的50010端口信息:

    <property>
        <name>dfs.datanode.address</name>
         <value>hbase1:50010</value>
    </property>

原来是设置错误了。50010是hadoop中datanode数据交互端口,而hbase1是master(即namenode节点)映射ip,所以会报无法分配请求地址。


解决方法:

将配置文件中hbase1改为0.0.0.0即可。改后的文件内容信息如下:

    <property>
        <name>dfs.datanode.address</name>
         <value>0.0.0.0:50010</value>
    </property>

改完之后,重启下hadoop。OK,问题解决!


附:hadoop集群默认端口配置

获取默认配置

      配置hadoop,主要是配置core-site.xml,hdfs-site.xml,mapred-site.xml三个配置文件,默认下来,这些配置文件都是空的,所以很难知道这些配置文件有哪些配置可以生效,上网找的配置可能因为各个hadoop版本不同,导致无法生效。浏览更多的配置,有两个方法:

1.选择相应版本的hadoop,下载解压后,搜索*.xml,找到core-default.xml,hdfs-default.xml,mapred-default.xml,这些就是默认配置,可以参考这些配置的说明和key,配置hadoop集群。

2.浏览apache官网,三个配置文件链接如下:

   http://hadoop.apache.org/common/docs/r0.20.2/core-default.html

   http://hadoop.apache.org/common/docs/r0.20.2/hdfs-default.html

   http://hadoop.apache.org/common/docs/r0.20.0/mapred-default.html

    这里是浏览hadoop当前版本号的默认配置文件,其他版本号,要另外去官网找。

其中第一个方法找到默认的配置是最好的,因为每个属性都有说明,可以直接使用。

另外,core-site.xml是全局配置,hdfs-site.xml和mapred-site.xml分别是hdfs和mapred的局部配置。


常用的端口配置

HDFS端口

           
MR端口



其他端口



基囖囖  767696856


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Halo 咯咯

有你的支持我会更加努力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值