【问题标题】:Hadoop Datanode starts on wrong interfaceHadoop Datanode 在错误的接口上启动
【发布时间】:2016-01-19 06:48:28
【问题描述】:

我们为我们的 hadoop 集群使用了 2 个接口。私人 eth-1 和公共。看起来当 hadoop datanode 启动时,它选择公共 IP 地址而不是私有 IP 地址。当我查看 hadoop-cmf-hdfs-DATANODE-hostname.log.out 时,它出现了

STARTUP_MSG: Starting DataNode
STARTUP_MSG:   host = hostname.public.net/208.x.x.x

它应该说的地方

STARTUP_MSG: Starting DataNode
STARTUP_MSG:   host = hostname-eth1.private.net/192.168.x.x

【问题讨论】:

    标签: java hadoop mapreduce cloudera network-interface


    【解决方案1】:

    在hdfs-site.xml中有一个设置,可以控制接口,被Data Node用作自己的IP地址。

    dfs.datanode.dns.interface = 数据节点应报告其 IP 地址的网络接口的名称。

    这设置为“默认”。如果你想使用 eth1,那么在 hdfs-site.xml 中设置这个属性为:

    <property>
        <name>dfs.datanode.dns.interface</name>
        <value>eth1</value>
      </property>
    

    引用“Hadoop The Definitive Guide”一书:

    There is also a setting for controlling which network interfaces the datanodes use as their IP addresses (for HTTP and RPC servers). The relevant property is dfs.datanode.dns.interface, which is set to default to use the default network interface. You can set this explicitly to report the address of a particular interface (eth0, for example).

    【讨论】:

    • 谢谢,但该行使用反向 dns 查询将主机名绑定到该 eth1 接口上的 IP 地址。不幸的是,我没有反向 dns。有没有什么地方我可以插入完整的主机名-eth1,这样它就不会寻找反向 dns 了?
    • 还有一个设置:“dfs.namenode.datanode.registration.ip-hostname-check”。在此处查看此设置的说明:hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-hdfs/…
    • 不走运。在 /var/logs/hadoop-hdfs 上绑定了错误的主机名org.apache.hadoop.hdfs.server.datanode.BlockScanner: Initialized block scanner with targetBytesPerSec 1048576 2015-10-20 18:47:08,408 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: File descriptor passing is enabled. 2015-10-20 18:47:08,409 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Configured hostname is hostname.public.net 最后一行必须是org.apache.hadoop.hdfs.server.datanode.DataNode: Configured hostname is hostname-eth1.private.net
    • 我检查了 Hadoop 代码。在获取主机名时,它调用函数 DNS.getDefaultHost(),该函数接受 2 个参数:接口和名称服务器。要设置名称服务器,您需要再设置一个参数:“dfs.datanode.dns.nameserver”。这也可以保留为“默认”值。
    【解决方案2】:

    你能试试apache web site引用的这个属性吗? (在连接到其他数据节点进行数据传输时,数据节点是否应该使用数据节点主机名。

    <property>
      <name>dfs.datanode.use.datanode.hostname</name>
      <value>true</value>
      <description>Whether datanodes should use datanode hostnames when
        connecting to other datanodes for data transfer.
      </description>
    </property>
    

    根据hdfs properties检查dfs.datanode.address等其他datanode属性,您可以找到解决方案

    还有一件事:检查主机文件中的 IP/域名映射。

    【讨论】:

      猜你喜欢
      • 2014-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-22
      • 1970-01-01
      • 1970-01-01
      • 2015-03-26
      • 1970-01-01
      相关资源
      最近更新 更多