
3.1 集群实例分析
本章先从一个实例开始。如图3-1所示,我们在AWS上构建了多个Hadoop YARN集群。其中最大的一个有160多个节点。

图3-1 Hadoop集群配置
在上面的Hadoop集群中,usa0m5d是给premium账号(即VIP账号)用的,而usa9m5d是给非premium账号(即普通账号)用的。我们使用chef(正迁移至CodeDeploy)在aws ec2上部署Hadoop集群,对于Master和Slave都分别有一个yml配置文件,用于配置集群所需的EC2(虚拟服务器)的类型和个数等。chef-repo/intent/service/hadoop-slave.yml设置Slave节点的配置参数,例如aws ec2实例类型(m5d),最大节点数(300)等。部分配置如下:



chef-repo/intent/service/hadoop-master.yml记录Master节点配置参数,例如实例类型为r5d,节点数为1:

创建和部署Hadoop集群是通过如下的脚本完成。执行后,就获得如图3-1所示的一个集群设置。

在如图3-1所示的AWS上,单击其中的Master,就可以看到如图3-2所示的配置参数。这些配置参数来自上述的配置文件。

图3-2 AWS上Master的配置信息
上面只是创建了集群的硬件资源。获取AWS给予分配的IP地址(见图3-2),在下面的chef-repo/data_bags/hadoops/production.yaml中配置,然后就可让自动的chef脚本部署和配置Hadoop集群,最后客户账号就能访问新的集群。



我们有一个下面的脚本来上载这个配置文件(等于是commit这个配置):



之后我们的chef脚本在各个节点上自动执行,它创建用户和组,安装Hadoop软件,修改Hadoop的配置文件(hdfs-site.xml、yarn-site.xml、core-site.xml等),创建instance上的目录(/mnt...),初始化HDFS(只在第一次时执行),启动服务(resourcemanager、namenode...),安装一些我们自己的脚本(health_check、snapshot),安装history crawler并配置cronjob让它每多少分钟执行一次等等。这个chef脚本默认是30分钟执行一下,我们有时直接通过下面的脚本命令来让它立即执行:

注意
pssh是一个Python编写的可以在多台服务器上执行命令的工具。我们也可以通过ssh到每台机器上单独执行。
部署完毕后,在浏览器中输入“http://172.18.186.13:8088/cluster”来查看集群上的应用状态(见图3-3)。如果有应用在这个集群上执行,这个集群部署就基本没问题了。用鼠标在左边菜单上单击“Nodes”,就可以看到所有节点的信息。单击“Scheduler”来查看集群资源调度配置(见图3-4),可以看出这些配置信息同上面的配置文件一致。在浏览器中输入“http://172.18.186.13:50070”来访问Hadoop控制台,如图3-5和图3-6所示。

图3-3 Resource Manager上的所有应用状态

图3-4 集群上的节点信息

图3-5 集群调度(队列)配置

图3-6 Hadoop控制台