数智资源网
首页 首页 大数据 查看内容

机架感知(Rack Awareness)机制浅述

木马童年 2020-12-25 08:15 56 0

机架感知(RackAwareness)通常,大型Hadoop集群会分布在很多机架上。在这种情况下,-- 希望不同节点之间的通信能够尽量发生在同一个机架之内,而不是跨机架。-- 为了提高容错能力,名称节点会尽可能把数据块的副本放 ...

机架感知(RackAwareness)

通常,大型Hadoop集群会分布在很多机架上。在这种情况下,

-- 希望不同节点之间的通信能够尽量发生在同一个机架之内,而不是跨机架。

-- 为了提高容错能力,名称节点会尽可能把数据块的副本放到多个机架上。

综合考虑这两点的基础上Hadoop设计了机架感知功能。

机架感知设计思想

首先,一个重要的假设前提是HDFS运行于一个具有树状网络拓扑结构的集群上。

例如集群由多个数据中心组成,每个数据中心里有多个机架,而每个机架上有多台计算机(数据节点)。如下图所示:

机架感知(Rack Awareness)机制浅述

机架感知(Rack Awareness)机制浅述

网络拓扑(NetworkTopology)

在Hadoop里,以类似于一种文件目录结构的方式来表示节点。

例如,R1的位置可以表示为 /D1/R1,而H12的位置可以表示为 /D2/R4/H12。

当数据节点启动的时候,需要通过一种机制来明确它在集群中的位置,才能构建完整的网络拓扑图。

因此,首先它需要确认它的上级节点(通常也就是机架)的位置。数据节点程序支持选项”-p”或”-parent”从命令行读入上级节点位置。

如果没有指定这个选项,那么会使用一个默认的上级节点。

至于如何获取上级节点信息,由实施Hadoop的机构自行决定。一个常用的做法是使用脚本打印当前机器的上级节点信息到标准输出stdout。

这样数据节点启动的时候就可以获取到上级节点的信息(Hadoop应该是通过接口’DNSToSwitchMapping’来解析这个信息,具体请参考手册的Class说明)。

数据节点会把它的位置信息发给名称节点。

当名称节点收到数据节点的位置信息以后,它会先检查网络拓扑中是否已经有这个数据节点的记录。

如果有,它会把旧的记录删除,加入新的节点位置信息。

副本放置(ReplicaPlacement)

数据块的副本放置策略的目的是在以下两者之间取得平衡:

-- 使数据的可靠性和可用性较大化

-- 使写入数据产生的开销最小化

因此,当一个新的数据块被创建的时候,遵循以下规则:

-- 第1个副本放置于本地节点

-- 第2个副本放置于不同的机架

-- 第3个副本放置于本地机架的不同节点

-- 其余的副本在遵循以下限制的前提下随机放置

-- 1个节点最多放置1个副本

-- 如果副本数少于2倍机架数,不可以在同一机架放置超过2个副本

当重新复制一个数据块的时候,遵循以下规则:

-- 如果已有1个副本,把第2个副本放置在不同的机架

-- 如果已有2个副本且处于同一机架,把第3个副本放置在不同的机架

-- 如果已有2个副本但不处于同一机架,把第3个副本放置在和第1个副本相同的机架

-- 当可用副本数超过2个的时候,随机放置

当发生数据读取的时候,名称节点首先检查客户端是否位于集群中。

如果是的话,就可以按照由近到远的优先次序决定由哪个数据节点向客户端发送它需要的数据块。

也就是说,对于拥有同一数据块副本的节点来说,在网络拓扑中距离客户端近的节点会优先响应。

配置范例

为了获取机架id,可以写一个小脚本来定义IP(或者DNS名),并把想要的机架id打印到标准输出stdout。

这个脚本必须要在配置文件hadoop-site.xml里通过属性’topology.script.name’来指定。

例如:

topology.script.file.name

/home/hadoop/topology.py

用Python语言编写的脚本范例:

#!/usr/bin/env python

'''

This script used by hadoop to determine network/racktopology.It

should be specified in hadoop-site.xml viatopology.script.file.name

Property.

topology.script.file.name

/home/hadoop/topology.py

'''

import sys

from string import join

DEFAULT_RACK = '/default/rack0';

RACK_MAP = { '10.72.10.1' : '/datacenter0/rack0',

'10.112.110.26' : '/datacenter1/rack0',

'10.112.110.27' : '/datacenter1/rack0',

'10.112.110.28' : '/datacenter1/rack0',

'10.2.5.1' : '/datacenter2/rack0',

'10.2.10.1' : '/datacenter2/rack1'

}

if len(sys.argv)==1:

print DEFAULT_RACK

else:

print join([RACK_MAP.get(i, DEFAULT_RACK) for i insys.argv[1:]]," ")

以上。

容错能力 计算机
0
为您推荐
HIVE数据仓库完美实战课程,资源教程下载

HIVE数据仓库完美实战课程,资源教程下载

课程名称【快速掌握HIVE视频教程】HIVE数据仓库完美实战课程课程目录├第一周:hive基…...

尚硅谷大数据Flink技术与实战,资源教程下载

尚硅谷大数据Flink技术与实战,资源教程下载

课程名称尚硅谷大数据Flink技术与实战课程目录理论_Flink基础 001__Flink理论_Flink…...

廖雪峰-2019大数据分析精品资料价值1980元,资源教程下载

廖雪峰-2019大数据分析精品资料价值1980元,资源教程

课程介绍:廖雪峰大神历时3个月打磨出来的《数据分析必备技能》的视频学习资料,由浅…...

尚硅谷-大数据项目之电商数仓教程下载

尚硅谷-大数据项目之电商数仓教程下载

课程介绍:本课程以国内电商巨头实际业务应用场景为依托,对电商数仓的常见实战指标以…...

小码哥李明杰Java版《恋上数据结构与算法》 ,资源教程下载

小码哥李明杰Java版《恋上数据结构与算法》 ,资源教

课程目录01-学前须知01-为什么要学习数据结构与算法02-编程语言的选择03-课程大纲04-…...

阿里云大数据分析师ACP认证视频教程下载

阿里云大数据分析师ACP认证视频教程下载

课程介绍阿里云大数据行业认证-大数据分析师认证(ACP-Alibaba Cloud Certified Prof…...

恋上数据结构与算法(第二季),视频教程下载

恋上数据结构与算法(第二季),视频教程下载

课程介绍:课程由MJ老师和名企算法大咖共同研发,在保证易懂的同时确保课程的系统全面…...

社交网络分析与挖掘,视频教程下载

社交网络分析与挖掘,视频教程下载

课程介绍:社交网络和数据挖掘是计算机学科相关研究中的热点,其具体研究涵盖理论、关…...