阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Hadoop学习:HDFS 机架感知

214次阅读
没有评论

共计 2343 个字符,预计需要花费 6 分钟才能阅读完成。

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

目录:

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

常用策略:


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

Hadoop 学习:HDFS 机架感知

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

机架配置:


  • 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 文件,已经设置了此选项,如下图
  • Hadoop 学习:HDFS 机架感知
  • 查看 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 的内容已经修改成功:

  • Hadoop 学习:HDFS 机架感知    Hadoop 学习:HDFS 机架感知

分配原理:


  • 有了机架感知,NameNode 就可以画出下图所示的 datanode 网络拓扑图,
  • Hadoop 学习:HDFS 机架感知
  • 最底层是 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 的文章您也可能喜欢,不妨看看:

Ubuntu14.04 下 Hadoop2.4.1 单机 / 伪分布式安装配置教程  http://www.linuxidc.com/Linux/2015-02/113487.htm

CentOS 安装和配置 Hadoop2.2.0  http://www.linuxidc.com/Linux/2014-01/94685.htm

Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm

Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm

Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm

Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm

单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm

更多 Hadoop 相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-09/134885.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计2343字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中