在一个Hadoop集群中有不同类型的节点,它们对磁盘的要求是不同的。主(master)节点侧重于存储的可靠性,数据(data)节点就需要更好的读写性能,以及较大的容量。
在虚拟集群中,存储(datastore)可以分为本地(local)和共享(shared)两种类型。本地存储只能被其所在的主机上的虚拟机访问,而共享存储则可以被其他主机上的虚拟机访问到。本地存储的读写性能更好,而共享存储的可靠性更好。
磁盘部署的算法会根据用户输入,为不同类型的Hadoop节点提供最优的存储方案。
首先来看Hadoop集群中的主节点。因为主节点需要更高的可靠性,一般会配置上vSphere的高可用性(High Availability)和容错(Fault Tolerance)特性,所以共享存储是必须的。下面是json格式的配置文件的片段,显示如何指定主节点组的存储。
1 { |
2 "nodeGroups" : [ |
3 { |
4 "name": "master", |
5 "roles": [ |
6 "hadoop_namenode", |
7 "hadoop_jobtracker" |
8 ], |
9 "instanceNum": 1, |
10 "instanceType": "LARGE", |
11 "cpuNum": 2, |
12 "memCapacityMB":4096, |
13 "storage": { |
14 "type": "SHARED", |
15 "sizeGB": 20 |
16 }, |
17 "haFlag":"on", |
18 "rpNames": [ |
19 "rp1" |
20 ] |
21 }, |
从第13行开始是关于存储的配置,指定使用共享类型的存储(第14行“type”:“SHARED”),大小为20GB。第17行“haflag”:“on”指定使用vSphere的高可用性(HA)特性。Serengeti在分配磁盘的时候会为主节点分配共享类型的存储。
下面来看Hadoop集群中的数据节点。这些节点会有大量的磁盘读写操作,根据用户指定的可以使用的存储的类型,系统会使用不同的磁盘部署算法。
另外一种情况就是用户指定的本地存储。对于本地存储,我们推荐用户把每个物理磁盘单独定义(每个物理磁盘对应一个datastore)。这样的话,我们可以通过(1)尽可能多的使用本地存储,(2)提供更多的物理磁盘拓扑信息,来提高Hadoop的磁盘总体吞吐率。
这里通过一个例子来具体讲解Serengei的磁盘部署算法是如何工作的。假定有5个本地存储可供使用,需要分配50GB的空间。最简单的算法是把50GB平均分配到5个本地存储上去,每个本地存储上占用10GB的空间。但是每个本地存储上的可用空间可能是不同的,如果某个本地存储上的剩余空间小于10GB的话,这种算法就无法得到可行的部署方案。
我们使用的是一个改进的算法。首先将可用的本地存储按可用空间的大小从小到大进行排列。对于分配方案1,考虑将本地存储1的可用空间全部使用,而其他本地存储上使用和本地存储1的可用空间相同的空间,得到分配的总空间是25GB。
对于分配方案2,保持本地存储1的可用空间全部分配的状态,再将本地存储2的全部可用空间全部使用,对于比本地存储2大的其它存储,使用和本地存储2的可用空间(10GB)相同的空间,得到分配的总空间是45GB。如此类推,计算出全部的分配方案的空间大小。
我们需要的存储空间大小是50GB,这个位于分配方案2和分配方案3之间。所以我们知道必须使用本地存储1和2上的全部空间,而剩余的空间将在其它3个本地存储上平均分配。最终的磁盘部署方案是:
需要指出的是,数据节点的系统盘和数据盘有所不同,所以会被分到一个满足磁盘空间需求的存储上。
Hadoop磁盘部署的算法还需要处理其它一些特殊的情况,这里就不一一介绍了。
如有任何问题,您可以发邮件至bigdata_apac@vmware.com。
关于vSphere Big Data Extensions:
VMware vSphere Big Data Extensions(简称BDE)基于vSphere平台支持大数据和Apache Hadoop作业。BDE以开源Serengeti项目为基础,为企业级用户提供一系列整合的管理工具,通过在vSphere上虚拟化Apache Hadoop,帮助用户在基础设施上实现灵活、弹性、安全和快捷的大数据部署、运行和管理工作。了解更多关于VMware vSphere Big Data Extensions的信息,请参见http://www.vmware.com/hadoop。
作者介绍
朱向飞(Xiangfei Zhu)
VMware高级开发工程师,2013年加入VMware的大数据开发团队。在此之前就职于汤森路透的搜索引擎开发团队。参与过Java企业应用开发,互联网和即时通信,搜索引擎以及大数据处理等多个项目,拥有丰富的软件开发经验。