上海创意网站建设,新网站 seo,资源最多的磁力搜索引擎,网站定制开发前期要有一定的规划本文包含如下内容: ① 通过图解+源码分析/A1/B1/node1和 /A1/B2/node2 这两个节点的网络距离怎么算出来的 ② 客户端读文件时,副本的优先级。(怎么排序的,排序规则都有哪些?) ③ 我们集群发现的一个问题。
客户端读时,通过调用getBlockLocations RPC 获取文件的各个块。…本文包含如下内容: ① 通过图解+源码分析/A1/B1/node1和 /A1/B2/node2 这两个节点的网络距离怎么算出来的 ② 客户端读文件时,副本的优先级。(怎么排序的,排序规则都有哪些?) ③ 我们集群发现的一个问题。
客户端读时,通过调用getBlockLocations RPC 获取文件的各个块。 在给客户端返回这些块信息之前,NameNode会对每个块的各个副本(例如默认的3副本)按照一定规则排序。
这些规则大概有: ① 把在decommissioned/stale/slow这些状态节点上的副本移到后面; ② 计算客户端与每个副本所在节点的网络距离,把距离小的放在前面; ③ 同时也会考虑 storage type、节点的load(Xceiver线程数)等因素。
顺着 ClientProtocol#getBlockLocations 这个RPC方法往下找,最终找到相关的源码位置, 在org.apache.hadoop.hdfs.server.namenode.FSNamesystem#sortLocatedBlocks方法:
此方法参数:
clientMachine:代表客户端机器的字符串,一般是ip;blocks:客户端要读的文件的块的信息(LocatedBlocks对象里有LocatedBlock对象的列表)。private