网络拓扑 与 机器感知

网络拓扑

在本地网络中,两个节点被称为“彼此近邻”是什么意思?在海量数据处理中,其主要限制因素是节点之间数据的传输速率,即带宽稀缺。这里的想法是将两个节点之间的带宽作为距离的衡量标准。不用衡量节点之间的带宽,实际上很难实现(它需要一个稳定的集群,并且在集群中两两节点对数量是节点数量的平方)。

hadoop为此采用了一个简单的方法:把网络看作一棵树,两个节点之间的距离是他们到最近共同祖先的距离总和。该树中的层次是没有预先设定的, 但是相对与数据中心,机架和正在运行的节点,通常可以设定等级。

节点距离:两个节点到达最近的共同祖先的距离总和。

具体想法是针对以下每个常见,可用带宽依次递减:

  1. 同一节点上的进程。
  2. 同一机架上的不同节点。
  3. 同一数据中心中不同机架上的节点。
  4. 不同数据中心的节点。

举个例子,假设有数据中心d1,机架r1中的节点n1。该节点可以表示为“/d1/r1/n1”。利用这种标记,这里给出四种距离描述:

网络拓扑 与 机器感知
网络拓扑概念

我们必须要意识到Hadoop无法自动发现你的网络拓扑结构。它需要一些帮助,不过在默认情况下,假设网络是扁平化的只有一层,换句话说,所有节点在同一数据中心的同一机架上。规模小的集群可能如此,不需要进一步配置。


机架感知 

机架感知可以通过python 或 shell实现,详情请参考官方文档的案例:

http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-common/RackAwareness.html

http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html#Data_Replication

http://hadoop.apache.org/docs/r1.2.1/hdfs_design.html#Data+Replication

hadoop2.6.0 -- For the common case, when the replication factor is three, HDFS’s placement policy is to put one replica on one node in the local rack, another on a different node in the local rack, and the last on a different node in a different rack.

hadoop1.2.1 -- For the common case, when the replication factor is three, HDFS’s placement policy is to put one replica on one node in the local rack, another on a node in a different (remote) rack, and the last on a different node in the same remote rack. 

低版本Hadoop复本节点选择

  1. 第一个复本在client所处的节点上。如果客户端在集群外,随机选一个。
  2. 第二个复本和第一个复本位于不相同机架的随机节点上。
  3. 第三个复本和第二个复本位于相同机架,节点随机。
网络拓扑 与 机器感知
低版本Hadoop副本节点选择

 

高版本Hadoop副本节点选择

  1. 第一个副本在 client 所处的节点上。如果客户端在集群外,随机选一个。
  2. 第二个副本和第一个副本位于相同机架,随机节点。
  3. 第三个副本位于不同机架,随机节点。
网络拓扑 与 机器感知
高版本Hadoop副本节点选择

 

HDFS如何控制客户端读取哪个副本节点数据

HDFS满足客户端访问副本数据的最近原则。即客户端距离哪个副本数据最近,HDFS就让哪个节点把数据给客户端。