从主机名谈Hadoop集群管理

最近处理的数据越来越复杂,互联网上很火的Hadoop久闻盛名,想去学习一下。按照网上的例子配置了一番,老是出错误。但是正因为这个错误,才引发出对Hadoop集群管理的话题。

先说一下我的实验环境。我准备了4台虚拟机:

IP地址机器名(hostname)作用
192.168.1.101hadoop_1NameNode
192.168.1.102hadoop_2SecondaryNameNode
192.168.1.103hadoop_3DataNode-1
192.168.1.104hadoop_4DataNode-2

 

 

当我对NameNode进行格式化后,执行start-all,发现java进程没有启动成功(jps发现无任何进程),于是去查看日志,得到了下面的异常信息:

ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: java.lang.IllegalArgumentException: Does not contain a valid host:port authority: hdfs://hadoop_1:9000

 

常用的分隔符都不行,我们如何管理这些机器呢?要知道,这只是一个实验环境。到了真正的生产环境,也许你将会面对几十上百,甚至上千节点。后来没办法,尝试使用“减号”来分隔,将所有的机器名都换成如下形式:

IP地址机器名(hostname)
192.168.1.101hadoop-1
192.168.1.102hadoop-2
192.168.1.103hadoop-3
192.168.1.104hadoop-4

 

 

此时运行start-all.sh后终于正常了:

[hduser@hadoop-1 bin]$ jps
1292 NameNode
1498 JobTracker
1438 SecondaryNameNode
1587 Jps

既然减号,可以使用,在大规模集群中我们可以这样划分:

 

集群:针对不同的任务,我们可以使用不同的集群,后期还可以根据复杂度对该集群进行伸缩控制。简称c,cluster

机架:在机房中,服务器都会放到机架当中,像一个大衣柜一样,一层一层堆叠着符合工业标准尺寸的服务器。简称r,rack

筐位:这个主要是针对刀片式服务器,在同一个机架中我们放置若干个刀片筐,用来承载刀片服务器。简称f,frame

槽位:这个也是针对刀片式服务器,在同一个刀片筐中可以放置若干个刀片服务器,每一个放置的位置称之为槽位。简称s,slot

 

在Hadoop集群优化中我们知道,从配置中体现网络拓扑结构,可以让集群自动优先选择同一机架中的机器协同工作,这样减少不同机架间的网络IO,提高效率。而网络规划中必不可少的就是对机器命名的管理。我们要从机器名中就能判断出它所在的位置。无论是性能优化的角度,还是从硬件维护的角度来说都是有益的。

因此我们不妨对Hadoop集群中的机器进行如下命名:

hadoop-c-[集群编号]-r-[机架编号]-f-[筐位编号]-s-[槽位编号]

例如:

hadoop-c-0-r-0-f-0-s-0

这就表示这台机器属于0号集群,在0号机架上0号筐位的0槽位上。是不是很容易定位?

 

 

在实验环境中,我们使用“修改/etc/hosts文件”的方式来手工绑定机器名和ip地址。这样做的缺点是一旦一台机器做出改动之后,要对群集中所有机器的hosts文件进行同步更新。这对于大型集群来说简直是一场噩梦。我们可以使用专门的DNS服务器来管理这些机器。只要所有的节点使用相同的DNS服务器,在主机更改时只需要修改DNS服务器即可。

 

写在最后:

其实个人觉得只要能让A主机找到B主机即可。我们往往将hosts文件中,IP对应的主机名称和/etc/sysconfig/network的HOSTNAME属性设置成一致的,这是一种习惯。然而实际上我们完全可以设置成不一样的。拿我们刚才实验环境中的例子。在/etc/sysconfig/network中设置的HOSTNAME属性为hadoop_1(这里面有下划线),我们完全可以在hosts文件中就指明192.168.1.101指向的机器是hadoop-1(注意,这里用的是减号),在我们配置Hadoop的时候,一律使用hadoop-1这样的名称即可。

相关阅读

相关推荐