【Hadoop】33-集群规范

Hadoop运行在商业硬件上。用户可以选择普通硬件供应商生产的标准化的、广泛有效的硬件来构建集群,无需使用特定供应商生产的昂贵、专有的硬件设备。
首先澄清两点。第一,商业硬件并不等同于低端硬件。低端机器常常使用便宜的零部件,其故障率远高于更贵一些(但仍是商业级别)的机器。当用户管理几十台、上百台,甚至几千台机器时,选择便宜的零部件并不划算,因为更高的故障率推高了维护成本。第二,也不推荐使用大型的数据库级别的机器,因为这类机器的性价比太低了。用户可能会虑使用少数几台数据库级别的机器来构建一个集群,使其性能达到一个中等规模的商业机器集群。然而,某一台机器所发生的故障会对整个集群产生更大的负面影响,因为大多数集群硬件将无法使用。
硬件规格很快就会过时。但为了举例说明,下面列举一下硬件规格。在2014年,运行Hadoop的和YARN节点管理器的典型机器有以下规格:

  • 处理器,两个六核/八核 3GHz CPU
  • 内存,64~512GB ECC RAM
  • 存储器,12~24×1~4TB SATA硬盘
  • 网络,带链路聚合的千兆以太网
     

尽管各个集群采用的硬件规格肯定有所不同,但是Hadoop一般使用多核CPU和多磁盘,以充分利用硬件的强大功能。
为何不使用RAID?
尽管建议采用RAID(Redundant Array of lndependent Disk,即磁盘阵列)作为namenode的存储器以保护元数据,但是若将RAID作为datanode的存储设备则不会给HDFS带来益处·HDFS所提供的节点间数据复制技术已可满足数据备份需求,无需使用RAID的冗余机制。
此外,尽管RAID条带化技术(RAID 0)被广泛用于提升性能,但是其速度仍然比用在HDFS里的JBOD(Just  aBunch Of Disks)配置慢·JBOD在所有磁盘之间循环调度HDFS块·RAID0的读/写操作受限于磁盘阵列中响应最慢的盘片的速度,而JBOD的磁盘操作均独立,因而平均读/写速度高于最慢盘片的读/写速度·需要强调的是,各个磁盘的性能在实际使用中总存在相当大的差异,即使对于相同型号的磁盘。在一些针对某一雅虎集群的基准评测中,在一项测试(Gridmix)中,JBOD比RAID0快10%;在另一测试(HDFS写吞吐量)中,JBOD比RAID0快30%。
最后,若JBOD配置的某一磁盘出现故障,HDFS可以忽略该磁盘,继续工作·而RAID的某一盘片故障会导致整个磁盘阵列不可用,进而使相应节点失效。

1、集群规模

一个Hadoop集群到底应该多大?这个问题并无确切的答案。但是,Hadoop的魅力在于用户可以在初始阶段构建一个小集群(大约10个节点),并随存储与计算需求增长持续扩充。从某种意义上讲,更恰当的问题是“你的集群需要增长得多快?"用户可以通过下面这个关于存储的例子得到更深的体会。
假如数据每天增长1TB。如果采用三路HDFS复制技术,则每天需要增加3TB存储能力。再加上一些中间文件和日志文件哟占30%)所需空间,基本上相当于每周添设一台机器(2m4年的典型机器)。实际上,用户一般不会每周买一台新机器并将其加人集群。类似粗略计算的意义在于让用户了解集群的规模。本例中,个集群保存两年的数据大致需要100台机器。

Master节点场景
集群的规模不同,运行master守护进程的配置也不同,包括:namenode、辅助namenode、资源管理器及历史服务器。对于一个小集群(几十个节点)而言,在一台master机器上同时运行namenode和资源管理器通常是可接受的(只要至少一份namenode的元数据被另存在远程文件系统中)。然而,随着集群规模增大,完全有理由分离它们。
由于namenode在内存中保存整个命名空间中的所有文件元数据和块元数据,其内存需求很大。辅助namenode在大多数时间里空闲,但是它在创建检查点时的内存需求与主namenode差不多。i羊情参见11.1.1节对文件系统映像和编辑日志的讨论。一旦文件系统包含大量文件,单台机器的物理内存便无法同时运行主namenode和辅助namenode。
除了简单的资源需求,在分开的机器上运行master的主要理由是为了高可用性。HDFS和YARN都支持以主备方式运行master的配置。如果主master故障,在不同硬件上运行的备机将接替主机,且儿乎不会对服务造成干扰。在HDFS中,辅助namenode的检查点功能由备机执行,所以不需要同时运行备机和辅助namenode。
配置和运行HadoopHA不是本书的内容。可以参考Hadoop网站或供应商文档以获取更详细的信息。

2、网络拓扑

Hadoop集群架构通常包含两级网络拓扑,如图10-1所示。一般来说,各机架装配30一40个服务器,共享一个10GB的交换机(该图中各机架只画了3个服务器),各机架的交换机又通过上行链路与一个核心交换机或路由器(至少为10GB或更高)互联。该架构的突出特点是同一机架内部的节点之间的总带宽要远高于不同机架上的节点间的带宽。
机架的注意事项
为了达到Hadoop的最佳性能,配置Hadoop系统以让其了解网络拓扑状况就极为关键。如果集群只包含一个机架,就无需做什么,因为这是默认配置。但是对于多机架的集群来说,描述清楚节点.机架的映射关系就很有必要。这使得Hadoop将MapReduce任务分配到各个节点时,会倾向于执行机架内的数据传输(拥有更多带宽),而非跨机架数据传输。HDFS还能够更加智能地放置复本(replica),以取得性能和弹性的平衡。

图10-1.Hadoop集群的典型二级网络架构

诸如节点和机架等的网络位置以树的形式来表示,从而能够体现出各个位置之间的网络“距离"。namenode使用网络位置来确定在哪里放置块的复本(参见3.6.1节);MapReduce的调度器根据网络位置来查找最近的复本,将它作为map任务的输人。
在图10-1所示的网络中,机架拓扑由两个网络位置来描述,即/switch1/rack1和/switch1/rack2。由于该集群只有一个顶层路由器,这两个位置可以简写为/rack1和/rack2。
Hadoop配置需要通过一个Java接口DNSToSwitchMapping来指定节点地址和网络位置之间的映射关系。该接口定义如下:

public interface DNSToSwitchMapping {
    List<String> resolve(List<String> var1);
    void reloadCachedMappings();
    void reloadCachedMappings(List<String> var1);
}

resolve()函数的输人参数names描述IP地址列表,返回相应的网络位置字符串列表。net.topology.node.switch.mapping.impl配属性实现了接口,namenode和资源管理器均采用它来解析工作节点的网络位置。

****** 识别结果 1******

在上例的网络拓扑中,可将nodel、node2和node3映射到/rack1,将node4、node5和node6映射到/rack2中。
但是,大多数安装并不需要自己实现接口,只需使用默认的ScriptBasedMapping实现即可,它运行用户定义的脚本来描述映射关系。脚本的存放路径由属性net.topology.script.file.name控制。脚本接受一系列输人参数,描述带映射的主机名称或IP地址,再将相应的网络位置以空格分开,输出到标准输出。
如果没有指定脚本位置,默认情况下会将所有节点映射到单个网络位置,即/default-rack。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值