hadoop集群机架感知对性能调优的理解

1.查询机架信息指令:

default-rack

如上信息为默认的加价信息,即无机架配置

2.机架感知基础

Hadoop作为大数据处理的典型平台,在海量数据处理过程中,其主要限制因素是节点之间的数据传输速率。因为集群的带宽有限,而有限的带宽资源却承担着大量的刚性带宽需求,例如Shuffle阶段的数据传输不可避免,所以如何优化带宽资源的占用是一个值得思考的问题。仔细思考下,Hadoop数据传输的需求主要表现在几个方面:

  • Map阶段的数据传输:Map阶段的非本地化任务需要远程拷贝数据块,然而这种带宽消耗在一定程度上不是必要的,如果数据能做到很高程度的本地化可以减少这个阶段的数据传输带来的带宽消耗。
  • Shuffle阶段的数据传输:Map阶段的中间数据集需要传输到Reduce端需要大量的带宽资源。
  • Reduce阶段的计算结果保存:Reduce端最终的计算结果需要保存到HDFS上,这种带宽的消耗也是不可避免的。
      Hadoop的设计者们在最初就考虑到了这个问题,所以在Map阶段的任务调度过程中做了一定程度的优化。当一个有空闲资源的TT(TaskTracker)向JT(JobTracker)申请任务的时候,JT会选择一个最靠近TT的任务给它,选择的原则是:
  • TT本地是否有未处理的任务,有则调度之;
  • TT本地没有未处理的任务,则调度一个和TT同一个机架上的任务给它;
  • 否则,调度一个本数据中心的任务给他。
      然而,我们会思考JT使如何知道这种结构关系的呢?为啥就知道另一个节点就是和这个TT是同一个机架或者数据中心的呢?这就要追溯到Hadoop的机架感知功能了。

3.什么是机架感知

机架感知是一种计算不同计算节点(TT)的距离的技术,用以在任务调度过程中尽量减少网络带宽资源的消耗,这里用尽量,想表达的是当一个TT申请不到本地化任务时,JT会尽量调度一个机架的任务给他,因为不同机架的网络带宽资源比同一个机架的网络带宽资源更可贵。当然,机架感知不仅仅用在MR中,同样还用在HDFS数据块备份过程中(第一个replica选择本节点【如果上传是DataNode】或者随机的一个DN(系统会尽量避免存储太满和太忙的节点),第二个节点选择于第一个节点不同机架的DN,第三个选择放在第二个DN同一个机架的另一个DN上)

4.机架感知实践

首先,看下面这个图的一个集群结构,D1和D2是两个数据中心,下面各有两个机架,然后叶子节点是DN。



此时H1和H2是同一个Rack的,H1和H4是同一个数据中心的。而H1和H7是不同数据中心的。
  然而,上面这种树结构不是Hadoop自己就自动建立的,需要用户的手动设置协助。在小型的集群中和单机测试中,一般是用不着配置的,所以机架感知功能默认是关闭的。
  要设置机架感知,用户需要自己编写脚本来定义节点的映射关系和配置conf/core-site.xml文件的属性来启动机架感知。
  一个脚本实例程序如下面的例子所示,定义了一个rack字典,里面有每个hostname对应的rack信息,后面也给出了每个IP对应的rack信息。将这段脚本程序放在每个节点的hadoop/bin/目录下,包括主节点。

  • 根据测试,此脚本中写hostname无效
    1、配置机架感知脚本RackAware.py:注意python语法换行时要使用4个空格
#!/usr/bin/python
#-*-coding:UTF-8 -*- import sys
import sys
rack = {"RS1-1":"rack1",
"RS1-2":"rack1",
"RS2-1":"rack2",
}
if name ==" main ":
print "/" + rack.get(sys.argv[1],"rack0")

脚本原理:如rack的服务器IP或主机名会使用对应的机架,不在的会使用rack0

2、在Namenode所在机器的core-site.xml中配置topology.script.file.name
写好脚本程序后,然后配置core-site.xml文件,添加如下属性:


  net.topology.script.file.name
  /home/hadoop/RackAware.py

3 、 对 RackAware.py 脚 本 赋 与 执 行 权 限 , 重 启 Namenode
4 、 重 启 过 程 中 , 如 日 志 出 现 类 似 下 面 内 容 代 表 配 置 生 效

2016-10-10 10:00:00:000 INFO
org.apache.hadoop.net.NetworkTopology:Adding a new node:/rack1/192.168.137.31:50010

5 、 可 通 过 命 令 查 看 :hdfs dfsadmin -printTopology

你可能感兴趣的:(hadoop集群机架感知对性能调优的理解)