Hadoop:Rack Awareness
副本的放置对HDFS可靠性和性能至关重要。 优化副本放置HDFS有别于其他大多数分布式文件系统。 这是一个功能,需要大量的调优和经验。 基于机架感知(rack awareness)的副本放置策略的目的是为了提高数据可靠性、可用性和网络带宽的利用率。 当前实现的副本放置策略是第一次在这个方向上努力。 实施这一政策的短期目标是验证在生产系统中,了解更多关于它的行为,建立一个测试和研究更复杂的政策基础。
大型HDFS实例运行在集群的计算机通常分布在许多机架上。 在不同机架上的两个节点之间的通信必须经过交换机。 在大多数情况下,同一机架内的机器之间的网络带宽大于不同的机架之间机器的网络带宽。
一个简单但没有优化的策略就是将副本存放在单独的机架上。 这可以防止在整个架失败时数据的丢失,允许从多个机架上读取数据。 这一策略将副本分布在集群中,便于组件的负载平衡失败。 然而,这一策略增加了写的代价,因为一个写操作需要传输block到多个机架。所以Hadoop并没有采用该策略。
NameNode决定每个DataNode所属的机架ID是通过中rack awareness策略。 Hadoop 设计 rack awareness策略 的初衷:
1)希望不同节点之间的通信能够尽量发生在同一个机架之内,而不是跨机架。
2)为了提高容错能力,namenode会尽可能把block的replica放到多个rack上。
基于rack awareness的replica分配算法 :
1)当一个新的数据块被创建的时候,遵循以下规则:
-- 第1个副本放置于本地节点
-- 第2个副本放置于不同的机架
-- 第3个副本放置于本地机架的不同节点
-- 其余的副本在遵循以下限制的前提下随机放置
-- 1个节点最多放置1个副本
-- 如果副本数少于2倍机架数,不可以在同一机架放置超过2个副本
2)当重新复制一个数据块的时候,遵循以下规则:
-- 如果已有1个副本,把第2个副本放置在不同的机架
-- 如果已有2个副本且处于同一机架,把第3个副本放置在不同的机架
-- 如果已有2个副本但不处于同一机架,把第3个副本放置在和第1个副本相同的机架
-- 当可用副本数超过2个的时候,随机放置
上面所说的随机,其实每个机架上副本的数量低于上限(这个上限基本上是 (replicas - 1)/rack + 2 )。
通常情况下, 设置复制因子3。根据HDFS的分配策略,会将2个副本在一个机架内的2个datanode上,另一个放在不同的机架上的。 这一策略削减机架间写交通通常提高了写性能。 机架失败的概率远低于节点失败的概率,这一政策不会影响数据的可靠性和可用性保证。 然而,它确实减少读取数据时网络带宽使用(因为一块放置在只有两个单独的架,而不是三个)。使用 这一策略时,文件的副本不均匀地分布在机架(三分之一的副本在一个节点上,三分之二的副本是一个架子上,和其他第三均匀分布在剩余的机架)。 这个策略在不影响数据的可靠性的前提下提高了写性能、读取性能。
此外:NameNode不允许datanode有多个副本相同的块,最大数量的副本创建datanode的总数。
机架上各个datanode之间的距离的计算:
机架拓扑:

H1..H12 ,H是Host的缩写。就是代表各个机器。通常情况下,一个机器上分配一个datanode。
R1..R4 ,R是Rack的缩写。就是代表机架。通常一个rack上都 有一个交换机。

根据上面所说,每个 node 与父节点的距离是1,那么:
distance(/D1/R1/H1,/D1/R1/H1)=0 相同的datanode distance(/D1/R1/H1,/D1/R1/H2)=2 同一rack下的不同datanode distance(/D1/R1/H1,/D1/R1/H4)=4 同一IDC下的不同datanode distance(/D1/R1/H1,/D2/R3/H7)=6 不同IDC下的datanode 机架的选择 为了减少整体带宽消耗和读延迟,当读取数据时,HDFS 会尽可能的从最接近reader的副本读取。
Hadoop:Rack Awareness的更多相关文章
- Hadoop:相关概念
Hadoop:相关概念 一.Hadoop简介 Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS. 1.特点 (1)HDFS有高容错性的 ...
- Hadoop:Hadoop单机伪分布式的安装和配置
http://blog.csdn.net/pipisorry/article/details/51623195 因为lz的linux系统已经安装好了很多开发环境,可能下面的步骤有遗漏. 之前是在doc ...
- 我搭建大数据Hadoop完全分布式环境遇到的坑---hadoop: command not found
搭建大数据hadoop环境,遇到很多问题,这里记录一部分,以备以后查看. [遇到问题].在安装配置完hadoop以后,需要格式化namenode,输入指令:hadoop namenode -forma ...
- Hadoop:操作 Hadoop Cluster
启动Hadoop 当完成所有的必要配置后,将HADOOP_CONF_DIR目录中的所有配置文件复制到所有机器,建议将HDFS和YARN后台进程一不同的用户身份运行,比如运行HDFS进程们的用户为hdf ...
- Hadoop: Hadoop Cluster配置文件
Hadoop配置文件 Hadoop的配置文件: 只读的默认配置文件:core-default.xml, hdfs-default.xml, yarn-default.xml 和 mapred-defa ...
- Hadoop:输入,输出,key,value格式
map: (K1, V1) → list(K2, V2) reduce: (K2, list(V2)) → list(K3, V3) (K1, V1): jobConf.setInputKeyClas ...
- 一篇文看懂Hadoop:风雨十年,未来何去何从
本文分为技术篇.产业篇.应用篇.展望篇四部分 技术篇 2006年项目成立的一开始,“Hadoop”这个单词只代表了两个组件——HDFS和MapReduce.到现在的10个年头,这个单词代表的是“核心” ...
- Hadoop:Windows 7 32 Bit 编译与运行
所需工具 1.Windows 7 32 Bit OS(你懂的) 2.Apache Hadoop 2.2.0-bin(hadoop-2.2.0.tar.gz) 3.Apache Hadoop 2.2.0 ...
- HDFS机架感知功能原理(rack awareness)
转自:http://www.jianshu.com/p/372d25352d3a HDFS NameNode对文件块复制相关所有事物负责,它周期性接受来自于DataNode的HeartBeat和Blo ...
随机推荐
- Linux命令学习备忘
格式: 命令:原理:实践及截图 1.su <user> 执行该命令,需要输入password,它是<user>中定义的用户的password,即,要变换成的用户的passw ...
- Python之Threading模块
Thread 先引入一个例子: >>> from threading import Thread,currentThread,activeCount >>> > ...
- Xshell 的安装教程
Xshell就是一个远程控制RHEL的软件:其他的还有很多,用什么都无所谓(根据公司情况). 下面我们来安装下这个工具: 双击exe 点下一步: 选 免费的 然后下一步:(免费的功能足够用了) 点接受 ...
- python 开源全文检索工具 Whoosh
About Whoosh Whoosh is a fast, featureful full-text indexing and searching library implemented in pu ...
- 项目实战4—haproxy 负载均衡和ACL控制
haproxy实现高级负载均衡实战 环境:随着公司业务的发展,公司负载均衡服务已经实现四层负载均衡,但业务的复杂程度提升,公司要求把mobile手机站点作为单独的服务提供,不在和pc站点一起提供服务 ...
- NETStandard,NETFx,Mono,NETCore,ASPNetCore 之间关系的整理
因为现在很多人对这几者之间的关系还不甚了解,这里根据我所知来做一个大概的介绍...... .NET Standard: .NET标准,只要符合这个标准实现类库,即可在支持此标准的Run ...
- 非一屏页面,出现遮罩层页面位置不动,并且遮罩层一屏显示。(pc,移动端都适用的方法)
首先展示页面效果: 遮罩没出现的页面张酱紫:页面在楼层二这个位置. 遮罩显示:后面页面页面任停留在当前浏览位置,滚动条并未回顶部 下面来说说写法: css: 页面具体布局样式......(此处省略无数 ...
- 51Nod--1051最大子矩阵和(DP入门)
分析: 我们已经解决了一维的问题(基础篇中的最大子段和问题),现在变成二维了,我们看看能不能把这个问题转化为一维的问题.最后子矩阵一定是在某两行之间的.假设我们认为子矩阵在第i行和第j列之间,我们如何 ...
- 在网站开发中经常用到的javaScript技术
1>屏蔽功能类 1.1 屏蔽键盘所有键<script language="javascript"><!--function document.onkeyd ...
- C#设计模式之十九状态模式(State Pattern)【行为型】
一.引言 今天我们开始讲"行为型"设计模式的第六个模式,该模式是[状态模式],英文名称是:State Pattern.无论是现实世界,还是面向对象的OO世界,里面都有一个东西, ...