Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hadoop Datanode在错误的接口上启动_Java_Hadoop_Mapreduce_Cloudera_Network Interface - Fatal编程技术网

Java Hadoop Datanode在错误的接口上启动

Java Hadoop Datanode在错误的接口上启动,java,hadoop,mapreduce,cloudera,network-interface,Java,Hadoop,Mapreduce,Cloudera,Network Interface,我们为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

我们为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

hdfs-site.xml中有一个设置,可以控制接口,该接口被数据节点用作其IP地址

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

这被设置为“默认”。如果要使用eth1,请在hdfs-site.xml中将此属性设置为:

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

dfs.datanode.dns.interface
eth1
引用“Hadoop最终指南”一书:

还有一个设置,用于控制数据节点将哪些网络接口用作其IP地址(对于HTTP和RPC服务器)。相关财产为:
dfs.datanode.dns.interface,设置为默认以使用默认网络

接口。您可以显式设置该属性以报告特定接口(例如eth0)的地址。

您可以尝试引用该属性吗?(连接到其他数据节点进行数据传输时,datanodes是否应使用datanode主机名。


dfs.datanode.use.datanode.hostname
真的
在以下情况下datanodes是否应使用datanode主机名:
连接到其他数据节点以进行数据传输。
根据检查其他datanode属性,如dfs.datanode.address,您可以找到解决方案


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

谢谢,但该行使用反向dns查询将主机名绑定到该eth1接口上的IP地址。不幸的是,我没有反向dns。是否有地方可以插入完全限定的主机名-eth1,这样它就不会查找反向dns?还有一个设置:“dfs.namenode.datanode.registration.ip主机名检查”。请参见此处此设置的描述:运气不佳。在/var/logs/hadoop hdfs上,它绑定了错误的主机名
org.apache.hadoop.hdfs.server.datanode.BlockScanner:使用targetBytesPerSec 1048576初始化了块扫描程序2015-10-20 18:47:08408 INFO org.apache.hadoop.hdfs.server.datanode.datanode:启用了文件描述符传递。2015-10-20 18:47:08409 INFO org.apache.hadoop.hdfs.server.datanode.datanode:配置的主机名是hostname.public.net
最后一行必须是
org.apache.hadoop.hdfs.server.datanode.datanode:配置的主机名是hostname-eth1.private.net
我检查了hadoop代码。获取主机名时,它调用函数DNS.getDefaultHost(),该函数接受两个参数:interface和nameserver。要设置名称服务器,您需要再设置一个参数:“dfs.datanode.dns.nameserver”。这也可以保留为“默认”值。
<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>