HDFS多副本放置策略及云中的优化(LDBAS)

在HDFS集群中,一般设置多副本提高可靠性(冗余),也能提高数据读取的总体性能。但这多个副本应该选择哪些节点进行放置呢?即本文要讨论的数据放置策略,或称多副本放置策略 replica placement policy
mark: 本文中,默认副本因子为3。

最原始的放置策略即把三个副本尽量分配到不同的三个节点上。否则,假设两副本放置到了一个节点,则会因为该节点的故障而直接损失两个副本,且在该数据被大量客户端同时读取时,两个副本也不能分担负载(该节点的处理能力即上限)。

三副本放置

机架感知策略 Rack Awareness

既然考虑了节点故障,不妨再考虑下机架故障:由于断电/物理线路断路/交换机故障等问题造成一整个机架的机子同时崩溃时……若某个重要机密放置时正好全放在了这一个机架的三台机子上……就问你怕不怕!
若我们在数据放置时,尽量将一个数据的不同副本尽量均匀地放置到不同机架的机子中,就能有效避免机架崩溃即数据丢失的情况,提高可靠度。若你非要问我:几个机架都崩溃了呢?机房都没了呢?我也无言以对,抱拳向“杠精”致敬。

网络拓扑

实现“均匀放置到不同机架”的策略之前,我们需要先识别不同的机架。在Hadoop中,通过网络拓扑对节点进行相对位置定义。树形的网络位置拓扑如下,一个严格的层级结构。

网络位置拓扑

/datacenter/rack/node,类似文件系统中的文件路径名,Hadoop据此来识别不同的节点。

但是集群无法自己感知到各节点的相对位置(其实可以通过探测网络延迟来推断),需要进行机架感知的配置。配置前,所有的节点的相对位置都默认为是一样的“/default-rack”,只会通过IP去区分。
Hadoop中,可通过调用Java类或配置文件指定的外部脚本来获取各节点的网络位置标志符。但两种方式都需要遵守继承org.apache.hadoop.net.DNSToSwitchMapping接口,以保证节点与ID的一一对应关系,拓扑信息格式/rack/host。

  • 使用Java类:实现一个类,该类将由net.topology.node.switch.mapping.impl参数指定
  • 使用外部脚本:由net.topology.script.file.name参数指定,以下是官网给的一个python脚本示例,输入节点IP可输出对应的位置ID。
#!/usr/bin/python
# this script makes assumptions about the physical environment.
#  1) each rack is its own layer 3 network with a /24 subnet, which
# could be typical where each rack has its own
#     switch with uplinks to a central core router.
# 2) topology script gets list of IP's as input, calculates network address, and prints '/network_address/ip'.

import netaddr
import sys
sys.argv.pop(0)                                                  # discard name of topology script from argv list as we just want IP addresses

netmask = '255.255.255.0'                                        # set netmask to what's being used in your environment.  The example uses a /24

for ip in sys.argv:                                              # loop over list of datanode IP's
    address = '{0}/{1}'.format(ip, netmask)                      # format address string so it looks like 'ip/netmask' to make netaddr work
    try:
        network_address = netaddr.IPNetwork(address).network     # calculate and print network address
        print "/{0}".format(network_address)
    except:
        print "/rack-unknown"     

机架感知策略

启用机架感知后的副本放置策略具体如下:

  1. 如果writer在集群节点中,将副本一放置到它所属的节点上,无法满足则放置到与它同机架的随机一个节点,再不行就随机一个节点。
  2. 副本二放置到不同机架的节点上。
  3. 副本三放置到与副本二同机架的节点中。

由此避免机架故障带来的数据丢失,并能有效减少机架间的写数据带来的流量开销,可提高写入性能,但是限定在了两个机架中从而降低了数据读取的总网络带宽。算是一个总体性能的综合衡量考虑吧。
若副本因子大于3,后续的副本会随机放置,但总体上会保证每个机架的副本数量小于 (replicas-1) / racks +2

LDBAS(可靠性部分)

在云环境中又不一样了。在云平台中,两个虚拟机可能会存在于一台物理宿主机中,称之为虚拟机共存。若两个副本被分配到这两个同宿主机的虚拟节点中,一样地存在可靠性下降(当物理机宕掉时)和性能瓶颈(该节点的处理能力限制了该副本的并发读取上限)。

LDBAS即解决了云环境中,虚拟共存带来的可靠性下降,主要思想即重构Hadoop网络拓扑,将虚拟节点的物理宿主机信息考量其中,副本分配时尽量分布到不同物理宿主机的虚拟机节点,避免或减少副本在硬件设备(物理机/机架)的冗余放置,从而提高可靠性。即网络拓扑更新为:/机架/物理宿主机/虚拟节点。


LDBAS网络位置拓扑

由图,可定义两个节点的距离为树中最短路径的边的条数。由此节点间距离越小,即节点的共存信息越少,在其中放置副本的可靠性越高。故将节点间距离作为副本放置时选择节点的依据。
如何求解副本放置的多个节点呢?暴力求解固然能得到最优解,但遍历搜索多节点集合选择相对距离最小的一个,求解的时间复杂度达到O(n^k),k是副本因子数。HDFS原始放置策略,是针对每个副本都遍历节点进行选择,复杂度在(可·n),LDBAS也采用了贪心算法求解:

  1. 优先客户端所在节点或与其同机架节点或随机
  2. 与副本一放置节点,距离最远的节点
  3. 与副本一、二放置节点总距离最远的节点
    实质策略中,还考虑了本地性的影响因素,此处仅针对可靠性,不做展开(可见后续文章)。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343