HDFS 机架感知(Rack Awareness)

什么是机架感知

设置机架感知的意义:

默认情况:

  1. 默认情况下HDFS没有开启机架感知,所有的机器默认都是在同一个机架下,名为: /default-rack
  2. HDFS不能够自动判断集群中各个datanode的网络拓扑情况,HDFS写入block是随机的

为什么要设置机架感知:

  1. 开启机架感知,NN可以知道DN所处的网络位置,
  2. 根据网络拓扑图可以计算出rackid,通过rackid信息可以计算出任意两台DN之间的距离
  3. 在HDFS写入block时,会根据距离,调整副本放置策略
  4. 写入策略会将副本写入到不同的机架上,防止某一机架挂掉,副本丢失的情况。同时可以降低在读取时候的网络I/O。但是会增加写操作的成本。

副本放置策略

默认副本放置策略:

在默认情况下副本数量是3个,所有的DN都是在同一个机架下,此时写block时,三个DN机器的选择是完全随机的。

  1. 写数据:HDFS是将不同的副本放置在不同的机架上,可以防止整个机架失效时数据的丢失,并且允许读数据的时候充分利用多个机架的带宽。这种策略设置可以将副本均匀地分配到集群中,有利于组织失效情况下的均衡负载。但是,因为这种策略的一个写操作需要传输数据块到多个机架,增加了写操作的成本。
  2. 读数据:在读数据时,为了减少整体的带宽和降低整体带宽延时,HDFS会尽量读取距离客户端最近的副本。如果程序和副本在同一个机架上优先读取该副本。如果跨多个数据中心,那么HDFS也将首先读取本地数据中心的副本。

配置机架后的副本放置策略:

配置机架感知后,HDFS在选择三个DN时,就会进行相应的判断:

  1. 如果上传本机不是一个DN,而是一个客户端,那么就从所有slave机器中随机选择一台DN作为第一个块的写入机器(DN1)。而此时如果上传机器本身就是一个DN,那么就将该DN本身作为第一个块写入机器。
  2. 随后在DN1所属的机架外的另外的机架上,随机的选择一台,作为第二个block的写入DN机器(DN2)
  3. 在写第三个block前,先判断前两个DN是否在同一个机架上,如果是在同一个机架,那么就尝试在另外一个机架上选择第三个DN作为写入机器(DN3)。而如果DN1和DN2没有在同一个机架上,则在DN2所在的机架上选择一台DN作为DN3。(hadoop fsck xx -files -blocks -locations -racks )
  4. 得到三个DN的列表后,从NN返回该列表到DFSClient之前,会在NN端首先根据该写入客户端跟DN列表中每个DN之间的距离由近到远进行一个排序,客户端根据这个顺序由近到远的进行数据块的写入。
  5. 根据距离排好序的DN节点列表返回给DFSClient后,DFSClient便会创建Block OutputStream,并向这次block写入pipeline中的第一个节点(最近的节点)开始写入block数据
  6. 写完第一个block后,依次按照DN列表中的次远的node进行写入,直到最后一个block写入成功,DFSClinet返回成功,该block写入操作结束。

Ambari设置机架感知

  1. 登陆Ambari控制台,选择Host选项,打开对应的Host详情
  2. 在Summary选项卡中设置具体的Rack信息
  3. 重启服务,集群会自动进行rebalance
  4. 通过hdfs dfsadmin -printTopology命令可以查看当前集群机架状态
  5. reblance结束后,Under Replicated Blocks指标为0,代表所有Block已经完成备份

原生Hadoop集群设置机架感知

你可能感兴趣的:(HDFS 机架感知(Rack Awareness))