写在前面
本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!
本专栏目录结构和文献引用请见1000个问题搞定大数据技术体系
解答
机架感知到底是什么?
通常大型 Hadoop集群是以机架的形式来组织的,同一个机架上的不同节点间的网络状况比不同机架之间的更为理想, NameNode 设法将数据块副本保存在不同的机架上以提高容错性。
HDFS不能够自动判断集群中各个 DataNode 的网络拓扑情况, Hadoop允许集群的管理员通过配置 dfs.network.script 参数来确定节点所处的机架,配置文件提供了ip 到 rackid 的翻译。
NameNode 通过这个配置知道集群中各个 DataNode 机器的 rackid。
如果 topology.script.file.name没有设定,则每个 ip 都会被翻译成 /default-rack。
举例说明
机架感知如图所示
图中 D 和 R 是交换机,H 是 DataNode。
则 H1 的 rackid=/DI/R1/H1,有了 rackid 信息(这些 racked信息可以通过 topology.script.file.name 配置)就可以计算出任意两台 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,/D1/R1/H7)=6 # 不同 IDC 下的 DataNode
说明
- 当没有配置机架信息时,所有的机器 Hadoop都在同一个默认的机架下,名为“/default-rack”,这种情况的任何一台 DataNode 机器,不管物理上是否属于同一个机架,都会被认为是在同一个机架下。
- 一旦配置 topology.script.file.name,就按照网络拓扑结构来寻找 DataNode: topology.script.file.name 这个配置选项的 value指定为一个可执行程序,通常为一个脚本。