hadoop start-dfs 不在从属设备上创建数据节点

Posted

技术标签:

【中文标题】hadoop start-dfs 不在从属设备上创建数据节点【英文标题】:hadoop's start-dfs not creating datanode on the slave 【发布时间】:2021-12-06 06:21:56 【问题描述】:

我正在尝试在两个节点上设置一个 Hadoop 集群。我的主节点上的start-dfs.sh 正在打开一个窗口,并且在窗口关闭后不久,当我执行start-dfs 它记录namenode 已正确启动,但datanode 未正确启动并记录以下内容:

    Problem binding to [slave-VM1:9005] java.net.BindException: Cannot assign requested address: bind; For more details see:  http://wiki.apache.org/hadoop/BindException

我已经设置了

ssh-keygen -t rsa -P ''
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

(并且还使用正确的公钥设置adminstrators_authorized_keys 文件)(ssh user@remotemachine 也在工作并提供对从属设备的访问权限)

这是我在主机和从机 (Windows) 上的完整 Hadoop 配置集:

hdfs-site.xml : 
<configuration>
    <property>
            <name>dfs.name.dir</name>
            <value>/C:/Hadoop/hadoop-3.2.2/data/namenode</value>
    </property>
<property>
  <name>dfs.datanode.https.address</name>
  <value>slaveVM1:50475</value>
</property>
    <property>
            <name>dfs.data.dir</name>
            <value>/C:/Hadoop/hadoop-3.2.2/data/datanode</value>
    </property>

    <property>
            <name>dfs.replication</name>
            <value>2</value>
    </property>
</configuration>

core-site.xml : 


<configuration>
 <property>
   <name>dfs.datanode.http.address</name>
   <value>slaveVM1:9005</value>
 </property>
 <property>
            <name>fs.default.name</name>
            <value>hdfs://masterVM2:9000</value>
  </property>
  <property>
            <name>hadoop.tmp.dir</name>
            <value>/C:/Hadoop/hadoop-3.2.2/hadoopTmp</value>
   </property>
   <property>
            <name>fs.defaultFS</name>
            <value>hdfs://masterVM2:8020</value>
   </property>
</configuration>

mapred-site.xml

<configuration>
<property>
         <name>mapred.job.tracker</name>
         <value>masterVM2:9001</value>
   </property>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property> 
        <name>mapreduce.application.classpath</name>
        <value>%HADOOP_HOME%/share/hadoop/mapreduce/*,%HADOOP_HOME%/share/hadoop/mapreduce/lib/*,%HADOOP_HOME%/share/hadoop/common/*,%HADOOP_HOME%/share/hadoop/common/lib/*,%HADOOP_HOME%/share/hadoop/yarn/*,%HADOOP_HOME%/share/hadoop/yarn/lib/*,%HADOOP_HOME%/share/hadoop/hdfs/*,%HADOOP_HOME%/share/hadoop/hdfs/lib/*</value>
    </property>
</configuration>

yarn-site.xml

   <configuration>
    <property>
            <name>yarn.acl.enable</name>
            <value>0</value>
    </property>

    <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>master</value>
    </property>

    <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
    </property>
</configuration>
 

PS:我是两台机器的管理员,我设置了 HADOOP_CONF_DIR C:\Hadoop\hadoop-3.2.2\etc\hadoop 我还在hadoop_conf_dirslaves文件中设置了从IP。

PS:如果我删除代码:

<property>
  <name>dfs.datanode.https.address</name>
  <value>slave:50475</value>
</property> 

来自hdfs-site.xml

然后datanote和namenode都在主节点上启动。

主机:

*.*.*.* slaveVM1
*.*.*.* masterVM2

...是各个机器的IP,其他的条目都被注释掉了

【问题讨论】:

您应该报告您使用的是 windows、mac 还是 linux。如果您使用任何特殊设置。我看到你有'C:'引用,所以它可能是你正在运行的窗口,但不想假设 是的,我在 Windows server 19 上 您能添加您的主机文件条目吗? 查看我的更新,谢谢 您能否澄清一下:如果您删除:dfs.datanode.https.addressslave:50475dfs.datanode.https.addressslaveVM1:50475dfs.datanode.http.address slaveVM1:9005 能用吗? 【参考方案1】:

这通常会发生

BindException:无法分配请求的地址:bind;

当端口在使用中。意思可能是应用程序已经启动,或者之前启动但没有正确关闭,或者另一个应用程序正在使用该端口。尝试重新启动,(作为一种严厉但相当有效的清除端口的方法)。

【讨论】:

不,我通过更改端口进行了检查(我在检查所选端口的可用性时做了很多次)但无论我使用什么端口号,该异常仍然显示 看起来主服务器并没有尝试连接到从服务器,除了workers 文件之外,将从服务器暴露给主服务器涉及的配置是什么?

以上是关于hadoop start-dfs 不在从属设备上创建数据节点的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop 数据节点服务未在 hadoop 中的从属设备中启动

Hadoop的基础命令

Hadoop常用命令总结

Hadoop篇--Hadoop常用命令总结

第一次部署Hadoop2.5.2集群,部署完后一切正常,但是当关闭后集群用start-dfs.sh重启h后namenode会都死掉

Hadoop:从节点未启动