副本的放置对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的更多相关文章

  1. Hadoop:相关概念

    Hadoop:相关概念 一.Hadoop简介 Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS. 1.特点 (1)HDFS有高容错性的 ...

  2. Hadoop:Hadoop单机伪分布式的安装和配置

    http://blog.csdn.net/pipisorry/article/details/51623195 因为lz的linux系统已经安装好了很多开发环境,可能下面的步骤有遗漏. 之前是在doc ...

  3. 我搭建大数据Hadoop完全分布式环境遇到的坑---hadoop: command not found

    搭建大数据hadoop环境,遇到很多问题,这里记录一部分,以备以后查看. [遇到问题].在安装配置完hadoop以后,需要格式化namenode,输入指令:hadoop namenode -forma ...

  4. Hadoop:操作 Hadoop Cluster

    启动Hadoop 当完成所有的必要配置后,将HADOOP_CONF_DIR目录中的所有配置文件复制到所有机器,建议将HDFS和YARN后台进程一不同的用户身份运行,比如运行HDFS进程们的用户为hdf ...

  5. Hadoop: Hadoop Cluster配置文件

    Hadoop配置文件 Hadoop的配置文件: 只读的默认配置文件:core-default.xml, hdfs-default.xml, yarn-default.xml 和 mapred-defa ...

  6. Hadoop:输入,输出,key,value格式

    map: (K1, V1) → list(K2, V2) reduce: (K2, list(V2)) → list(K3, V3) (K1, V1): jobConf.setInputKeyClas ...

  7. 一篇文看懂Hadoop:风雨十年,未来何去何从

    本文分为技术篇.产业篇.应用篇.展望篇四部分 技术篇 2006年项目成立的一开始,“Hadoop”这个单词只代表了两个组件——HDFS和MapReduce.到现在的10个年头,这个单词代表的是“核心” ...

  8. 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 ...

  9. HDFS机架感知功能原理(rack awareness)

    转自:http://www.jianshu.com/p/372d25352d3a HDFS NameNode对文件块复制相关所有事物负责,它周期性接受来自于DataNode的HeartBeat和Blo ...

随机推荐

  1. [C#源代码]使用SCPI指令对指定通信端口(RS232/USB/GPIB/LAN)的仪器编程

    本文为原创文章,源代码为原创代码,如转载/复制,请在网页明显位置标明原文名称.作者及网址,谢谢! 本软件是基于NI-VISA/VISA32(Virtual Instrument Software Ar ...

  2. JavaScript 系统知识点图库

    JavaScript 是世界上最流行的,轻量级的编程语言. 这门语言可用于 HTML 和 web,更可广泛用于服务器.PC.笔记本电脑.平板电脑和智能手机等设备: JavaScript 被数百万计的网 ...

  3. 使用dropwizard(6)-国际化-easy-i18n

    前言 Dropwizard官方文档并没有提供国际化的模块,所以只能自己加.Spring的MessageResource用的很顺手,所以copy过来. Easy i18n 在整合Dropwizard的时 ...

  4. e2e测试之Nightmare

    一.e2e测试简介 e2e或者端到端(end-to-end)或者UI测试是一种测试方法,它用来测试一个应用从头到尾的流程是否和设计时候所想的一样.简而言之,它从一个用户的角度出发,认为整个系统都是一个 ...

  5. 一次php涉及跨域功能的麻烦及解决方案

    一,功能及描述 1,在后台管理网站(php)admin.xxx.com(以下简称admin),上拉取并编辑aaa.xxx.com(php,以下简称aaa)上的图片及文件 2,file_get_cont ...

  6. Elasticsearch java api 基本搜索部分详解

    文档是结合几个博客整理出来的,内容大部分为转载内容.在使用过程中,对一些疑问点进行了整理与解析. Elasticsearch java api 基本搜索部分详解 ElasticSearch 常用的查询 ...

  7. 项目实战6—Mysql实现企业级日志管理、备份与恢复实战

    Mysql实现企业级日志管理.备份与恢复实战 环境背景:随着业务的发展,公司业务和规模不断扩大,网站积累了大量的用户信息和数据,对于一家互联网公司来说,用户和业务数据是根基.一旦公司的数据错乱或者丢失 ...

  8. .NET作品集:linux下的博客程序

    博客程序架构 本博客程序是博主11年的时候参考loachs小泥鳅博客内核开发的.net跨平台博客cms,距今已有6年多了,个人博客网站一直在用,虽然没有wordpress那么强大,但是当时在深究.ne ...

  9. SQL Server学习之路(五):“增删改查”之“改”

    0.目录 1.前言 2.通过SSMS修改数据 3.通过SQL语句修改数据 3.1 修改单列数据 3.2 修改多列数据 1.前言 增删改查都是对数据的操作,其中"改"对应的SQL语句 ...

  10. IDEA 无法运行Junit, 报错Class not found xxxx Empty test suite.

    网上搜了一圈没找到答案, 最后才发现是因为testmodule没有把class编译到主代码编译的路径.