阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

从主机名谈Hadoop集群管理

119次阅读
没有评论

共计 2510 个字符,预计需要花费 7 分钟才能阅读完成。

最近处理的数据越来越复杂,互联网上很火的 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

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

 

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

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

相关阅读

Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm

Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm

Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm

Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm

单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm

搭建 Hadoop 环境(在 Winodws 环境下用虚拟机虚拟两个 Ubuntu 系统进行搭建)http://www.linuxidc.com/Linux/2011-12/48894.htm

更多 Hadoop 相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计2510字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中