什么是机架感知
设置机架感知的意义:
默认情况:
- 默认情况下HDFS没有开启机架感知,所有的机器默认都是在同一个机架下,名为: /default-rack
- HDFS不能够自动判断集群中各个datanode的网络拓扑情况,HDFS写入block是随机的
为什么要设置机架感知:
- 开启机架感知,NN可以知道DN所处的网络位置,
- 根据网络拓扑图可以计算出rackid,通过rackid信息可以计算出任意两台DN之间的距离
- 在HDFS写入block时,会根据距离,调整副本放置策略
- 写入策略会将副本写入到不同的机架上,防止某一机架挂掉,副本丢失的情况。同时可以降低在读取时候的网络I/O。但是会增加写操作的成本。
副本放置策略
默认副本放置策略:
在默认情况下副本数量是3个,所有的DN都是在同一个机架下,此时写block时,三个DN机器的选择是完全随机的。
- 写数据:HDFS是将不同的副本放置在不同的机架上,可以防止整个机架失效时数据的丢失,并且允许读数据的时候充分利用多个机架的带宽。这种策略设置可以将副本均匀地分配到集群中,有利于组织失效情况下的均衡负载。但是,因为这种策略的一个写操作需要传输数据块到多个机架,增加了写操作的成本。
- 读数据:在读数据时,为了减少整体的带宽和降低整体带宽延时,HDFS会尽量读取距离客户端最近的副本。如果程序和副本在同一个机架上优先读取该副本。如果跨多个数据中心,那么HDFS也将首先读取本地数据中心的副本。
配置机架后的副本放置策略:
配置机架感知后,HDFS在选择三个DN时,就会进行相应的判断:
- 如果上传本机不是一个DN,而是一个客户端,那么就从所有slave机器中随机选择一台DN作为第一个块的写入机器(DN1)。而此时如果上传机器本身就是一个DN,那么就将该DN本身作为第一个块写入机器。
- 随后在DN1所属的机架外的另外的机架上,随机的选择一台,作为第二个block的写入DN机器(DN2)
- 在写第三个block前,先判断前两个DN是否在同一个机架上,如果是在同一个机架,那么就尝试在另外一个机架上选择第三个DN作为写入机器(DN3)。而如果DN1和DN2没有在同一个机架上,则在DN2所在的机架上选择一台DN作为DN3。(hadoop fsck xx -files -blocks -locations -racks )
- 得到三个DN的列表后,从NN返回该列表到DFSClient之前,会在NN端首先根据该写入客户端跟DN列表中每个DN之间的距离由近到远进行一个排序,客户端根据这个顺序由近到远的进行数据块的写入。
- 根据距离排好序的DN节点列表返回给DFSClient后,DFSClient便会创建Block OutputStream,并向这次block写入pipeline中的第一个节点(最近的节点)开始写入block数据
- 写完第一个block后,依次按照DN列表中的次远的node进行写入,直到最后一个block写入成功,DFSClinet返回成功,该block写入操作结束。
Ambari设置机架感知
- 登陆Ambari控制台,选择Host选项,打开对应的Host详情
- 在Summary选项卡中设置具体的Rack信息
- 重启服务,集群会自动进行rebalance
- 通过hdfs dfsadmin -printTopology命令可以查看当前集群机架状态
- reblance结束后,Under Replicated Blocks指标为0,代表所有Block已经完成备份
网友评论