HDFS NameNode对文件块复制相关所有事物负责,它周期性接受来自于DataNode的HeartBeat和BlockReport信息,HDFS文件块副本的放置对于系统整体的可靠性和性能有关键性影响。
一个简单但非优化的副本放置策略是,把副本分别放在不同机架,甚至不同IDC。这样可以防止整个机架、甚至整个IDC崩溃带来的错误,但是这样文件写必须在多个机架之间、甚至IDC之间传输,增加了副本写的代价。
在缺省配置下副本数是3个,通常的策略是:第一个副本放在和Client相同机架的Node里(如果Client不在集群范围,第一个Node是随机选取不太满或者不太忙的Node);第二个副本放在与第一个Node不同的机架中的Node;第三个副本放在与第二个Node所在机架里不同的Node。
Hadoop的副本放置策略在可靠性(副本在不同机架)和带宽(只需跨越一个机架)中做了一个很好的平衡。
但是,HDFS如何知道各个DataNode的网络拓扑情况呢?它的机架感知功能需要 topology.script.file.name 属性定义的可执行文件(或者脚本)来实现,文件提供了NodeIP对应RackID的翻译。如果 topology.script.file.name 没有设定,则每个IP都会翻译成/default-rack。

默认情况下,Hadoop机架感知是没有启用的,需要在NameNode机器的hadoop-site.xml里配置一个选项,例如:

<property>  <name>topology.script.file.name</name><value>/path/to/script</value>
</property>

这个配置选项的value指定为一个可执行程序,通常为一个脚本,该脚本接受一个参数,输出一个值。接受的参数通常为datanode机器的ip地址,而输出的值通常为该ip地址对应的datanode所在的rackID,例如”/rack1”。Namenode启动时,会判断该配置选项是否为空,如果非空,则表示已经启用机架感知的配置,此时namenode会根据配置寻找该脚本,并在接收到每一个datanode的heartbeat时,将该datanode的ip地址作为参数传给该脚本运行,并将得到的输出作为该datanode所属的机架,保存到内存的一个map中。

至于脚本的编写,就需要将真实的网络拓朴和机架信息了解清楚后,通过该脚本能够将机器的ip地址正确的映射到相应的机架上去。Hadoop官方给出的脚本:http://wiki.apache.org/hadoop/topology_rack_awareness_scripts

以下分别是没有配置机架感知信息和配置机架感知信息的hadoop HDFS进行数据上传时的测试结果。

当没有配置机架信息时,所有的机器hadoop都默认在同一个默认的机架下,名为 “/default-rack”,这种情况下,任何一台datanode机器,不管物理上是否属于同一个机架,都会被认为是在同一个机架下,此时,就很容易出现之前提到的增添机架间网络负载的情况。在没有机架信息的情况下,namenode默认将所有的slaves机器全部默认为在/default-rack下,此时写block时,三个datanode机器的选择完全是随机的。

当配置了机架感知信息以后,hadoop在选择三个datanode时,就会进行相应的判断:
1. 如果上传本机不是一个datanode,而是一个客户端,那么就从所有slave机器中随机选择一台datanode作为第一个块的写入机器(datanode1)。而此时如果上传机器本身就是一个datanode,那么就将该datanode本身作为第一个块写入机器(datanode1)。
2. 随后在datanode1所属的机架以外的另外的机架上,随机的选择一台,作为第二个block的写入datanode机器(datanode2)。
3. 在写第三个block前,先判断是否前两个datanode是否是在同一个机架上,如果是在同一个机架,那么就尝试在另外一个机架上选择第三个datanode作为写入机器(datanode3)。而如果datanode1和datanode2没有在同一个机架上,则在datanode2所在的机架上选择一台datanode作为datanode3。
4. 得到3个datanode的列表以后,从namenode返回该列表到DFSClient之前,会在namenode端首先根据该写入客户端跟datanode列表中每个datanode之间的“距离”由近到远进行一个排序,客户端根据这个顺序有近到远的进行数据块的写入。
5. 当根据“距离”排好序的datanode节点列表返回给DFSClient以后,DFSClient便会创建Block OutputStream,并向这次block写入pipeline中的第一个节点(最近的节点)开始写入block数据。
6. 写完第一个block以后,依次按照datanode列表中的次远的node进行写入,直到最后一个block写入成功,DFSClient返回成功,该block写入操作结束。

通过以上策略,namenode在选择数据块的写入datanode列表时,就充分考虑到了将block副本分散在不同机架下,并同时尽量地避免了之前描述的网络开销。

转载自:HDFS机架感知功能原理(rack awareness)

HDFS机架感知功能原理(rack awareness)相关推荐

  1. YARN的机架感知功能

    最近几天做Hadoop机架感知功能时,在网上可以找到很多关于HDFS机架感知的资料,但是对于YARN机架感知的介绍却很少.这篇文章最主要就是说明机架感知功能对于YARN来说起到的作用,若有理解的偏差请 ...

  2. HDFS机架感知概念及配置实现

    一.机架感知是什么? 告诉 Hadoop 集群中哪台机器属于哪个机架 二.那么怎么告诉呢? Hadoop 对机架的感知并非是自适应的,亦即,hadoop 集群分辨 某台 slave 机器是属于哪个 r ...

  3. Hadoop配置机架感知(python脚本)

    昨天QQ群里提了一个hadoop运行效率分配的问题,总结一下,写个文章.集群使用hadoop-1.0.3 有些hadoop集群在运行的时候,不完全是绝对平均的分配,不过需要尽可能平均的分配任务,避免某 ...

  4. Hadoop3.2.0 Hadoop 机架感知

    Hadoop组件具有机架感知功能.例如,通过将一个块的分片放在不同的机架上,HDFS块放置将使用机架感知来实现容错.这可以在群集中发生网络切换故障或分区时提供数据可用性. Hadoop主守护进程通过调 ...

  5. [Hadoop]HDFS机架感知策略

    HDFS NameNode对文件块复制相关所有事物负责,它周期性接受来自于DataNode的HeartBeat和BlockReport信息,HDFS文件块副本的放置对于系统整体的可靠性和性能有关键性影 ...

  6. 机架感知(RackAwareness)

    一.背景 分布式的集群通常包含非常多的机器,由于受到机架槽位和交换机网口的限制,通常大型的分布式集群都会跨好几个机架,由多个机架上的机器共同组成一个分布式集群.机架内的机器之间的网络速度通常都会高于跨 ...

  7. HDFS副本放置策略和机架感知

    副本放置策略 的副本放置策略的基本思想是: 第一block在复制和client哪里node于(假设client它不是群集的范围内,则这第一个node是随机选取的.当然系统会尝试不选择哪些太满或者太忙的 ...

  8. 提到HDFS就会想到机架感知,那么机架感知你真的知道是什么吗?

    写在前面 本文隶属于专栏<1000个问题搞定大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和文献引用请见1000个问题搞定大数 ...

  9. HDFS 集群的机架感知

    HDFS 集群的机架感知 1.背景 1.1.Hadoop 的设计目的 1.2.Hadoop 的设计考虑 1.3.副本存放策略 2.配置机架感知 2.1.修改配置文件 core-site.xml 2.2 ...

最新文章

  1. linux xxd查看二进制文件命令
  2. Reporting service个人使用经验
  3. Qt Creator将应用程序部署到QNX Neutrino设备
  4. c++ 回调函数与std::function使用实例
  5. mfc创建一个word操作工程 【转自:http://blog.csdn.net/tg2003/article/details/4399981】
  6. 给我往死里贪——HRBUST - 1167-每种面值的货币要多少
  7. ES5-11原型与原型链深入、对象继承
  8. 完整免授权彩虹源码(多模板+小储云商城模板)6.7.5
  9. 设计模式学习笔记——享元(Flyweight)模式
  10. 受疫情影响:中国智能手机市场Q1出货量下滑严重
  11. 交朋友游戏C语言,幼儿园小班社会教案《我会交朋友》游戏活动
  12. Android开发之设置铃声
  13. 平面中判断点在三角形内算法(重心法)
  14. 分享两个在线制图网站
  15. 正版现货黄金怎么区分(上)
  16. The class file xxx contains a signature 'xxx;' ill-formed at position 6 问题的解决
  17. 生动理解关联规则——Apriori算法
  18. UG10.0四五轴立加卧加后处理制作教程
  19. 5G 承载网 — 承载网技术的演进方向
  20. 清除maven项目中的overlays 目录

热门文章

  1. C#练习题答案: 图片#1 - 重建巴别塔【难度:1级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战
  2. u大师制作linux启动盘制作工具,如何用u大师u盘启动盘制作工具制作启动u盘
  3. linux系统安装teamview,在Ubuntu 18.04系统上安装TeamViewer的两种方法
  4. 3ds Max 实验十一 材质的设置
  5. 了解公司企业:Intuit
  6. TCP粘包、半包原理及解决方案
  7. 申请公网ip后,配置光猫,路由器使用公网ip步骤
  8. java mp3静音检测,音频自动增益 与 静音检测 算法 附完整C代码
  9. java第10章总结
  10. 2018年华为精英挑战赛初赛放置算法Java实现