目前,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>