在一个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集群中的数据节点。这些节点会有大量的磁盘读写操作,根据用户指定的可以使用的存储的类型,系统会使用不同的磁盘部署算法。

对于用户指定的是共享存储的情况,因为共享存储的背后是 SAN 或者 NAS ,已经是由多块物理磁盘构成,并且磁盘的调度被隐藏在控制器之后,最优的磁盘部署算法是把所需的存储空间集合在一起,放在一个共享存储上。如果出现一个共享存储的空间不够的情况,系统会把分配后剩余的所需存储空间放在下一个可用的共享存储上,直到所需的存储空间全部分配完毕。


深入Hadoop磁盘部署的算法_第1张图片

另外一种情况就是用户指定的本地存储。对于本地存储,我们推荐用户把每个物理磁盘单独定义(每个物理磁盘对应一个datastore)。这样的话,我们可以通过(1)尽可能多的使用本地存储,(2)提供更多的物理磁盘拓扑信息,来提高Hadoop的磁盘总体吞吐率。


深入Hadoop磁盘部署的算法_第2张图片

这里通过一个例子来具体讲解Serengei的磁盘部署算法是如何工作的。假定有5个本地存储可供使用,需要分配50GB的空间。最简单的算法是把50GB平均分配到5个本地存储上去,每个本地存储上占用10GB的空间。但是每个本地存储上的可用空间可能是不同的,如果某个本地存储上的剩余空间小于10GB的话,这种算法就无法得到可行的部署方案。

我们使用的是一个改进的算法。首先将可用的本地存储按可用空间的大小从小到大进行排列。对于分配方案1,考虑将本地存储1的可用空间全部使用,而其他本地存储上使用和本地存储1的可用空间相同的空间,得到分配的总空间是25GB

140016466.png

对于分配方案2,保持本地存储1的可用空间全部分配的状态,再将本地存储2的全部可用空间全部使用,对于比本地存储2大的其它存储,使用和本地存储2的可用空间(10GB)相同的空间,得到分配的总空间是45GB。如此类推,计算出全部的分配方案的空间大小。

我们需要的存储空间大小是50GB,这个位于分配方案2和分配方案3之间。所以我们知道必须使用本地存储12上的全部空间,而剩余的空间将在其它3个本地存储上平均分配。最终的磁盘部署方案是:

140034134.png


需要指出的是,数据节点的系统盘和数据盘有所不同,所以会被分到一个满足磁盘空间需求的存储上。

Hadoop磁盘部署的算法还需要处理其它一些特殊的情况,这里就不一一介绍了。


如有任何问题,您可以发邮件至[email protected]


关于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


作者介绍

深入Hadoop磁盘部署的算法_第3张图片

朱向飞(Xiangfei Zhu

VMware高级开发工程师,2013年加入VMware的大数据开发团队。在此之前就职于汤森路透的搜索引擎开发团队。参与过Java企业应用开发,互联网和即时通信,搜索引擎以及大数据处理等多个项目,拥有丰富的软件开发经验。