简介

每个Hadoop集群都包括不止一个节点。这些节点可以按功能分成几个组,比如master组,worker组,client组等等。每个组里面的节点都有不同的资源要求,比如CPU,内存,存储。

在虚拟数据中心(DataCenter)中有一个或多个虚拟集群(Cluster),每个虚拟集群中有一个或多个主机(Host)。

节点部署是在保证每个节点资源需求的前提下,按照一定策略将Hadoop集群中的所有节点部署到物理主机上。


定义Hadoop集群

Hadoop集群可以通过UI来定义,也可以通过json格式的文件来定义。这里以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 },

上面的文件片段定义了master节点组(第2行“name”),其中包括一个节点(第9行“instanceNum”),每个节点需要2个虚拟CPU(第11行“cpuNum”),4096MB的内存(第12行“memCapacityMB”),20GB共享的存储空间(第13-16行)。


简单的节点部署策略

节点部署的策略有多种,先介绍最简单的一种。因为在一般情况下,Hadoop节点需要占用的磁盘空间是最紧张的资源,所以最基本的节点部署策略是按照磁盘空间的大小来考虑的。首先将所有Hadoop节点按照磁盘空间的要求从大到小进行排序,再将可用的Host按照剩余磁盘空间从大到小进行排序。第一步将磁盘空间需求最大的Hadoop节点部署到剩余磁盘空间最大的主机上去,第二步将磁盘空间需求次大的Hadoop节点部署到剩余磁盘空间次大的主机上去,以此类推。当然,如果后面碰到主机的剩余磁盘空间不够部署某个节点的话,前面拥有较大剩余磁盘空间的主机就会被考虑。这种策略的目的是尽量利用所有可用的主机来部署Hadoop节点,这样每个节点都有更多的资源可供使用。


数据和计算分离的节点部署策略

随着Hadoop的发展,为了提供更好的弹性和实现真正的多租户,Hadoop数据节点(DataNode)和计算节点(ComputeNode)分开部署的方式开始流行起来。在这种模式下,为了提供最好的性能,需要把数据节点和计算节点尽可能的部署在相同的主机上。而前面介绍的简单节点部署策略由于没有考虑这种要求,会出现下面这种不好的部署方案。

深入Hadoop节点部署的策略_第1张图片

图中有2个数据节点(DN)被放在了一个主机上,而有2个计算节点(CN)被放在了没有数据节点的主机上。

为了实现数据节点和计算节点分离下的最优部署,需要在定义Hadoop集群时指定一些参数。

我们先来看数据节点的定义:

22 {

23 "name": "data",

24 "roles": [

25 "hadoop_datanode"

26 ],

27 "instanceNum": 3,

28 "instanceType": "MEDIUM",

29 "cpuNum": 2,

30 "memCapacityMB":2048,

31 "storage": {

32 "type": "LOCAL",

33 "sizeGB": 50,

34 "dsNames4Data": ["DSLOCALSSD"],

35 "dsNames4System": ["DSNDFS"]

36 }

37 "placementPolicies": {

38 "instancePerHost": 1,

39 "groupRacks": {

40 "type": "ROUNDROBIN",

41 "racks": ["rack1", "rack2", "rack3"]

42 }

数据节点在每个主机上只部署1个(第38行“instancePerHost”:1),一共需要3个数据节点(第27行“instanceNum”:3)。

再看计算节点的定义:

45 {

46 "name": "compute",

47 "roles": [

48 "hadoop_tasktracker"

49 ],

50 "instanceNum": 6,

51 "instanceType": "SMALL",

52 "cpuNum": 2,

53 "memCapacityMB":2048,

54 "storage": {

55 "type": "LOCAL",

56 "sizeGB": 10

57 }

58 "placementPolicies": {

59 "instancePerHost": 2,

60 "groupAssociations": [{

61 "reference": "data",

62 "type": "STRICT"

63 }]

64 }

65 },

计算节点在每个主机上部署2个(第59行“instancePerHost”:2),并且必须部署在有数据节点的主机上(第60行“groupAssociations”和第61行“reference”:“data”)。

在这样的定义下,Hadoop集群部署后将是下面这种理想的状态:

深入Hadoop节点部署的策略_第2张图片

3个数据节点(DN)被分别部署在三台主机上,同时每个主机上还部署了2个计算节点(CN)。


机架(Rack)感知的节点部署策略

对于大规模的 Hadoop 集群,会在数据中心内使用多个机架( Rack )。通过指定机架名称,可以把特定的 Hadoop 节点组部署在指定的机架上。这种部署方式,可以在某个机架出现问题的时候,让 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企业应用开发,互联网和即时通信,搜索引擎以及大数据处理等多个项目,拥有丰富的软件开发经验。