【问题标题】:Unable to start a node manager on master无法在 master 上启动节点管理器
【发布时间】:2014-09-28 23:12:12
【问题描述】:

我正在设置一个 Hadoop YARN 集群,并且我正在使用一台机器作为主机和从机。当我使用以下命令启动 YARN 时,它会在从属节点上启动节点管理器,但不会在主节点上启动。

sbin/yarn-daemons.sh start nodemanager

我有一个master,也是slave,然后我在集群中有另外两个slave,slave中的nodemanagers正在正常启动。

我得到的错误:

org.apache.hadoop.yarn.exceptions.YarnRuntimeException: java.net.BindException: Problem binding to [0.0.0.0:8040] java.net.BindException: Address already in use; For more details see:  http://wiki.apache.org/hadoop/BindException

部分命令的输出。

cat /etc/services | grep 8040
ampify          8040/tcp                # Ampify Messaging Protocol
ampify          8040/udp                # Ampify Messaging Protocol

lsof -i tcp:8040
COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
java    28021   df  195u  IPv6 3580602      0t0  TCP server1.mydomain.com:ampify (LISTEN

【问题讨论】:

    标签: hadoop centos hadoop-yarn


    【解决方案1】:

    在 Hadoop 提供的默认配置下,端口 8040 是 NodeManager 用于本地化程序的端口。这基本上是一个服务器端点,负责将运行容器所需的文件带到本地节点。 (例如,这可以是 MapReduce 作业的 jar 文件或分布式缓存文件。)

    假设机器上有另一台服务器(此处显示为 Ampify)合法绑定到端口 8040,并且您不想停止该服务,则可以重新配置 NodeManager 用于本地化程序的端口.在您的 yarn-site.xml 文件中设置属性 yarn.nodemanager.localizer.address。这记录在这里:

    http://hadoop.apache.org/docs/r2.4.1/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

    从 Hadoop 树中的 XML 源中提取,这里是属性的文档:

    <property>
      <description>Address where the localizer IPC is.</description>
      <name>yarn.nodemanager.localizer.address</name>
      <value>${yarn.nodemanager.hostname}:8040</value>
    </property>
    

    【讨论】:

    • 我在 8040 上杀死了服务/进程,仍然得到同样的错误,看起来节点管理器启动了两次,或者是因为这台机器也在运行资源管理器和资源manager 也在 8040 上运行?
    • 这很奇怪。如果在启动 NodeManager 时没有其他进程绑定到 8040,那么我不希望看到该错误。 ResourceManager 没有绑​​定到 8040,至少在默认配置中没有。您是否尝试将 yarn.nodemanager.localizer.address 设置为您的 yarn-site.xml 中的不同端口?如果这有效,那么这可能会缩小问题的原因。
    • 我没有更改属性,因为我不想更改默认行为,我将更改它并立即尝试。
    • 克里斯感谢您的提示,但是看起来如果您在同一台机器上运行资源管理器和节点管理器,它们最终会使用链接中指定的相同端口。 milinda.pathirage.org/hadoop/yarn/2013/09/29/…,我按照该文档中的规定为每个端口提供了单独的端口,现在节点管理器与三个节点之一的资源管理器在同一台机器上启动,再次感谢!
    • 还有一个复杂的地方在于默认的 RM 地址是 0.0.0.0:8032。如果您在一个节点上运行所有内容,那很好,但对于分布式环境,您需要告诉所有 NodeManager 是 ResourceManager 的唯一主机。实际上,您需要将yarn.resourcemanager.address 放入您的yarn-site.xml,设置为rm.mydomain.com:8032,无论您的主机名是什么。 (感谢您的提问。我在上次回复中忘记了这部分。)
    【解决方案2】:

    上面的错误意味着,你试图在 8040 上启动一个进程,该进程已经被另一个实例占用。

    要消除此错误,您需要终止当前正在侦听端口 8040 的进程。您的 lsof 输出显示 pid 为 28021。使用以下命令终止该进程并重新启动

    kill -9 28021
    

    【讨论】:

    • 我杀了它仍然得到同样的错误,看起来节点管理器启动了两次,还是因为这台机器也在运行资源管理器并且资源管理器也在8040上运行?
    猜你喜欢
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多