从主机名谈Hadoop集群管理

2022-06-30 21:06:31 浏览数 (1)

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

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

IP地址

机器名(hostname)

作用

192.168.1.101

hadoop_1

NameNode

192.168.1.102

hadoop_2

SecondaryNameNode

192.168.1.103

hadoop_3

DataNode-1

192.168.1.104

hadoop_4

DataNode-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

后来搜索这个问题,原来不止我一个人遇到,就是因为主机名中不能含有下划线“_”,后来我尝试了将hostname中的下划线改成点“.”,发现问题依旧。也就是说,Hadoop集群中的机器名不仅不能包含下划线,点也不可以。(关于这个问题,我看到了一篇文章:http://www.linuxidc.com/Linux/2014-04/99859.htm,文中提到:“虽然linux支持一些特殊字符,但java里面并不支持”,至于他后面说的“点”可以,我这边实验的是不可以的)

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

IP地址

机器名(hostname)

192.168.1.101

hadoop-1

192.168.1.102

hadoop-2

192.168.1.103

hadoop-3

192.168.1.104

hadoop-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这样的名称即可。

0 人点赞