datanode域名

hadoop版本2.6.5

 当前集群的的/etc/hosts文件中每个节点均配置了短域名和长域名,hosts文件每行记录的格式为“IP 域名 域名别名”,datanode节点在启动时会获取当前节点的域名,代码如下:

org.apache.hadoop.net.DNS#resolveLocalHostname
private static String resolveLocalHostname() {
String localhost;
try {
localhost = InetAddress.getLocalHost().getCanonicalHostName();
} catch (UnknownHostException e) {
LOG.warn("Unable to determine local hostname "
+ "-falling back to "" + LOCALHOST + """, e);
localhost = LOCALHOST;
}
return localhost;
}
注意getCanonicalHostName获取到的是域名,即我们配置的短域名,如果使用的是InetAddress.getLocalHost().getHostName(),则会获取到长域名,目前集群中长域名是配置了dns的,客户端不需要在本地配置hosts文件即可使用webhdfs,否则由于在访问webhds时返回的是短域名,而短域名没有配置dns,这就导致客户端必须在/etc/hosts中配置集群各节点的host。
解决方案:
在resolveLocalHostname方法的上游调用链中发现程序先会从配置文件中查找hostname配置,代码如下:
DataNode#getHostName
private static String getHostName(Configuration config)
throws UnknownHostException {
String name = config.get(DFS_DATANODE_HOST_NAME_KEY);
if (name == null) {
name = DNS.getDefaultHost(
config.get(DFS_DATANODE_DNS_INTERFACE_KEY,
DFS_DATANODE_DNS_INTERFACE_DEFAULT),
config.get(DFS_DATANODE_DNS_NAMESERVER_KEY,
DFS_DATANODE_DNS_NAMESERVER_DEFAULT));
}
return name;
}

因此可以在每台datanode的hdfs-site.xml中配置本机的hostname为长域名,配置项为dfs.datanode.hostname
如:
<property>
<name>dfs.datanode.hostname</name>
<value>xxx.intranet.test01.tj1</value>
</property>

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、Windows中的认证 1.1 单机认证 NTLM Hash是支持Net NTML认证协议及本地认证过程中的一...
    CJ21阅读 8,943评论 1 1
  • 这篇文章主要是讲Hadoop2.9.2集群环境的搭建,其他关于Hadoop相关的一些知识可以从网络上去查看。 1....
    石头妈妈讲编程阅读 3,480评论 0 1
  • 一、架构 二、框架部署 2.1 准备 准备三台虚拟机,操作系统为CentOS 7.x,每台内存至少8G以上。 步骤...
    CJ21阅读 4,821评论 0 3
  • 本文搭建了一个由4个节点(node1、node2、node3、node4)构成的Hadoop-ha&zk集群. H...
    陈海军_cad0阅读 1,733评论 0 0
  • hadoop的单机部署没太大的难度,跟着官方指南一路走下来就行了。基本操作流程就是 下载hadoop安装包并解压缩...
    异同阅读 4,744评论 0 0

友情链接更多精彩内容