本文出处:http://blog.csdn.net/chaijunkun/article/details/23283431,转载请注明。由于本人不定期会整理相关博文,会对相应内容作出完善。因此强烈建议在原始出处查看此文。
随着大数据的普及,Hadoop应用也越来越广泛,然而不断扩展的节点数量对运维管理也提出了更高要求。本文围绕对主机名的配置这一主题来探讨集群的管理,旨在探讨一种可行的Hadoop集群管理方法。
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
常用的分隔符都不行,我们如何管理这些机器呢?要知道,这只是一个实验环境。到了真正的生产环境,也许你将会面对几十上百,甚至上千节点。后来没办法,尝试使用“减号”来分隔,将所有的机器名都换成如下形式:
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
集群:针对不同的任务、不同的机房区域,我们可以把所属于同一类的一大组机器作为集群,他们之间是要相互紧密协作的,因此我们把这些机器编组。简称g,group
机柜/机架:在机房中,我们能直接看到的一个个像大衣柜一样的东西就是机柜了,简称:c或r,cabinet / rack
机器位/筐位:机柜的尺寸都符合一定的工业标准,像楼层划分那样,由下至上堆叠楼层位置。至于框位这个称呼是针对刀片服务器来说的,一个刀片框中可以容纳多台刀片服务器,在密集计算中应用比较多。简称:f,floor / frame
槽位:这个也是针对刀片式服务器,在同一个刀片筐中可以放置若干个刀片服务器,每一个放置的位置称之为槽位。简称s,slot
根据上述概念的组合,我们就可以在一个较大规模的集群中很方便地找到一台机器的位置了。Hadoop集群也是从算法上保证了优先选择同一机架中的机器协同工作,这样减少不同机架间的网络IO,提高效率。而网络规划中必不可少的就是对机器命名的管理。我们要从机器名中就能判断出它所在的位置。无论是性能优化的角度,还是从硬件维护的角度来说都是有益的。
因此我们不妨对Hadoop集群中的机器进行如下命名:
hadoop-g-[集群编号]-r-[机架编号]-f-[筐位编号]-s-[槽位编号]
例如:
hadoop-g-0-r-0-f-0-s-0
这就表示这台机器属于0号集群,在0号机架上0号筐位的0槽位上。是不是很容易定位?
在实体机上通过开启多个虚拟机来搭建真实的Hadoop集群是非常节省成本的学习方法。然而无论是网上的资料还是培训老师那里,关于IP地址与主机名映射的解决办法都是逐一修改hosts文件。有没有好办法呢?其实,只要修改实体机的hosts文件即可。
以vmware workstation为例,详细步骤如下(注意红框部分):
首先进入虚拟网络适配器:
把虚拟机使用的网卡调整成如下配置,其实Host-Only应该也可以,只是为了方便虚拟机上网,才做成的NAT:
这里把子网配置成192.168.1.0/24(192.168.1.XXX网段,掩码255.255.255.0),然后点右边中间的“NAT设置”
得知内网的网关地址是192.168.1.2。接下来就逐一配置虚拟机IP地址
虚拟机的网络适配器选择为:
再以CentOS 6为例看下网络适配器设置:
DEVICE=eth0 HWADDR=00:0c:29:40:13:75 TYPE=Ethernet UUID=43370169-e5ef-483d-b24e-4be77ef1cffea ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static IPADDR=192.168.1.11 GATEWAY=192.168.1.2 NETMASK=255.255.255.0DNS设置:
search localdomain nameserver 192.168.1.2把所有机器的IP配置好后我们进行规划和命名。最后只改动宿主机的hosts文件:
192.168.1.11 zookeeper1 192.168.1.12 zookeeper2 192.168.1.13 zookeeper3 192.168.1.21 namenode1 192.168.1.22 namenode2 192.168.1.31 datanode1 192.168.1.32 datanode2 192.168.1.33 datanode3随便找台机器互ping:
[root@datanode3 ~]# ping zookeeper1 PING zookeeper1.localdomain (192.168.1.11) 56(84) bytes of data. 64 bytes from 192.168.1.11: icmp_seq=1 ttl=64 time=3.17 ms 64 bytes from 192.168.1.11: icmp_seq=2 ttl=64 time=0.264 ms 64 bytes from 192.168.1.11: icmp_seq=3 ttl=64 time=0.237 ms
都是通的。至此,配置完毕。