hadoop 如何确定其节点的主机名?

hadoop 如何确定其节点的主机名?

目前,jobtracker 和 namenode 生成的 URL 要么返回主机名(如 bubble.local),要么仅返回 bubble。除非客户端计算机在其 /etc/hosts 文件中指定了这些,否则这些 URL 最终无法解析。

当我在这些机器上运行hostname命令时,它会返回一个带有域名的完整主机名(例如bubbles.example.com)

在这些机器上运行一个小型 Java 测试

InetAddress addr = InetAddress.getLocalHost();
byte[] ipAddr = addr.getAddress();
String hostname = addr.getHostName();
System.out.println(hostname);

产生与命令一样的输出hostname

Hadoop 还能在哪里获取主机名以在其 jobtracker / namenode UI 中使用?

从 8 月初开始,这种情况就发生在使用 Hadoop 1.0.3 和 1.0.4-SNAPSHOT 的集群中。这些机器运行的是 CentOS 版本 5.8(最终版)。

我指的生成的 URL 是这样的

http://example:50075/browseDirectory.jsp?namenodeInfoPort=50070&dir=/

或者 http://example.local:50075/browseDirectory.jsp?namenodeInfoPort=50070&dir=/

答案1

我设法通过执行以下操作让 WebUI 使用完整的主机名。

在每个从属节点和主节点上,该/etc/hosts文件被修改为如下内容:

127.0.0.1 machine1.example.com machine1 localhost
#These 4 lines appear on all of the machines
1.2.3.3 machine1.example.com machine1
1.2.3.4 machine2.example.com machine2
1.2.3.5 machine3.example.com machine3
1.2.3.6 machine4.example.com machine4

现在,当我单击任务跟踪器或 hdfs web 工具中的 URL 时,它们包含节点的完整主机名和解析。

答案2

Hadoop 还能在哪里获取主机名以在其 jobtracker / namenode UI 中使用?

conf/core-site.xml

<property>
    <name>fs.default.name</name>
    <value>hdfs://hmaster90:9000</value>
    <description>
    The name of the default file system. Either the literal string
    "local" or a host:port for NDFS.
    </description>
</property>

conf/mapred-site.xml

<property>
  <name>mapred.job.tracker</name>
  <value>hmaster90:9001</value>
</property>

相关内容