client 向 Active NN 发送写请求时,NN为这些数据分配DN地址,HDFS文件块副本的放置对于系统整体的可靠性和性能有关键性影响。一个简单但非优化的副本放置策略是,把副本分别放在不同机架,甚至不同IDC,这样可以防止整个机架、甚至整个IDC崩溃带来的错误,但是这样文件写必须在多个机架之间、甚至IDC之间传输,增加了副本写的代价,是否有较优的方案来解决这个问题呢?

目录:

  • 常用策略
  • 机架配置
  • 分配原理

常用策略:


  • hdfs 在缺省配置下副本数是3个,通常的策略是:
  1. 第一个副本放在和Client相同机架的Node里(如果Client不在集群范围,第一个Node是随机选取不太满或者不太忙的Node)
  2. 第二个副本放在与第一个Node不同的机架中的Node
  3. 第三个副本放在与第二个Node所在机架里不同的Node. 示例图如下:

  • 默认情况下,Hadoop机架感知是没有启用的,这时任何一台 DN 机器,不管物理上是否属于同一个机架,NN 都会默认将他们默认为在/default-rack下, 此时,就很容易出现之前提到的增添机架间网络负载的情况,如我们前面单节介绍基于 hdp2.4安装的集群就没指定rack, 如下图所示。

机架配置:


  • hdfs 的机架感知功能需要在NN机器的hadoop下 core-site.xml里配置net.topology.script.file.name选项,这个配置选项的value指定为一个可执行程序,通常为一个脚本,该脚本接受一个参数,输出一个值
  • 接受的参数通常为datanode机器的ip地址,而输出的值通常为该ip地址对应的datanode所在的rackID
  • Namenode启动时,会判断该配置选项是否为空,如果非空,则表示已经启用机架感知的配置,此时namenode会根据配置寻找该脚本,并在接收到每一个datanode的heartbeat时,将该datanode的ip地址作为参数传给该脚本运行,并将得到的输出作为该datanode所属的机架,保存到内存的一个map中
  • 脚本的编写,参见Hadoop官方给出的脚本:http://wiki.apache.org/hadoop/topology_rack_awareness_scripts
  • 在 hdp2.4 安装后的 hadoop 目录下的配置文件中, 查看 hadoop的 core-site.xml 文件,已经设置了此选项,如下图
  • 查看 topology_script.py 脚本,里面使用的文件是 topology_mappings.data,用vim编辑此文件,换成真实的网络拓扑,如下
    [network_topology]
    hdp2=/rack1
    192.168.2.2=/rack2
    hdp3=/rack2
    192.168.2.99=/rack1
  • 手工修改配置文件,重启服务后修改内容会被冲掉,所以用我们在 ambaria 上去修改,选择 "host" -> "Action" -> "Selected hosts" -> "hosts" --> "set Rack" 修改每台host对应的rack, 保存修改,重启因修改配置而受影响的组件服务,成功后示例如下,这时再去看 topology_mappings.data 的内容已经修改成功:

  •     

分配原理:


  • 有了机架感知,NameNode就可以画出下图所示的datanode网络拓扑图,
  • 最底层是Hx是 datanode, 则H1的rackid=/D1/R1/H1,H1的parent是R1,R1的是D1,有了这些rackid信息就可以计算出任意两台datanode之间的距离
    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
  • 写文件时根据策略输入 dn 节点列表,读文件时按与client由近到远距离返回 dn 列表

hadoop(三):hdfs 机架感知的更多相关文章

  1. Hadoop基础-网络拓扑机架感知及其实现

    Hadoop基础-网络拓扑机架感知及其实现 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.网络拓扑结构 在本地网络中,两个节点被称为“彼此近邻”是什么意思?在海量数据处理中,其 ...

  2. hdfs 机架感知和复制因子的设置

    dfs.replication 新更新的复制因子的参数对原来的文件不起作用. 譬如说,原来的复制因子是2,则原来文件上传的时候就只有两个副本. 现在把dfs.replication设置为3,重新启动h ...

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

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

  4. hdfs 机架感知

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

  5. HDFS机架感知

    Hadoop版本:2.9.2 什么是机架感知 通常大型 Hadoop 集群是以机架的形式来组织的,同一个机架上的不同节点间的网络状况比不同机架之间的更为理想,NameNode 设法将数据块副本保存在不 ...

  6. [HDFS_add_3] HDFS 机架感知

    0. 说明  HDFS 副本存放策略 && 配置机架感知 1. HDFS 的副本存放策略 HDFS 的副本存放策略是将一个副本存放在本地机架节点上,另外两个副本放在不同机架的不同节点上 ...

  7. 实现hadoop中的机架感知

    hadoop中声明是有机架感知的功能,能够提高hadoop的性能.平时我们使用的hadoop集群,实际上是从来没有使用上这个功能的. hadoop中所说的 机架感知的实现实际上这样的: hadoop启 ...

  8. Hadoop--Hadoop的机架感知

    Hadoop的机架感知 Hadoop有一个“机架感知”特性.管理员可以手工定义每个slave数据节点的机架号.为什么要做这么麻烦的事情?有两个原因:防止数据丢失和提高网络性能.     为了防止数据丢 ...

  9. Hadoop(8)-HDFS的读写数据流程以及机架感知

    1. HDFS的写数据流程 1.客户端通过fs模块向NameNode申请文件上传,NameNode检查请求是否合法,如用户权限,目标文件是否已存在,父目录是否存在等等 2.NameNode返回是否可以 ...

随机推荐

  1. magento 去掉index.php .html

    首先应该确保你的服务器环境,达到了magento的运行需求,若你是使用的是magento专用空间就不必担心了,若不是请查看我以前的文章,检测你的运行环境(http://www.hellokeykey. ...

  2. 多线程编程3 - NSOperationQueue

    一.简介 一个NSOperation对象可以通过调用start方法来执行任务,默认是同步执行的.也可以将NSOperation添加到一个NSOperationQueue(操作队列)中去执行,而且是异步 ...

  3. git 上传

    首先明白两个点: git clone diveinedu@192.168.1.254:~/YGYSocket  从服务器上下载项目 divein 服务器密码 nc -l -t 2000  socket ...

  4. tracking 问题解决

    1.dir,或者C++函数读文件名,不推荐.搞乱了名字 2. matio读写矩阵

  5. 本地日志数据实时接入到hadoop集群的数据接入方案

    1. 概述 本手册主要介绍了,一个将传统数据接入到Hadoop集群的数据接入方案和实施方法.供数据接入和集群运维人员参考. 1.1.  整体方案 Flume作为日志收集工具,监控一个文件目录或者一个文 ...

  6. Canvas 获取颜色值

    Canvas 是 HTML5 的画布元素,按照像素绘制图像.有时需要用户点击鼠标的时候获取像素值. 获取画布元素 var canvas = document.getElementById(" ...

  7. UVa 11246 - K-Multiple Free set

    题意大意: 一个{1..n}的集合,求一个子集合,使得元素个数最多,并且不存在有两个元素x * k = y,求出最多的元素个数是多少. 分析: 先要删除k倍的,删除为{k, 2k, 3k, 4k, 5 ...

  8. 137. Single Number II

    Given an array of integers, every element appears three times except for one. Find that single one. ...

  9. tyvj 1402 dp

    P1402 [NOIP2010]乌龟棋 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2010提高组复赛第二题 描述 小明过生日的时候,爸爸送给他一 ...

  10. Container With Most Water

    Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai).  ...