HDFS的副本放置策略及机架感知

简介: 副本放置策略的基本思想是:第一个block副本放在和client所在的node里(如果client不在集群范围内,则这第一个node是随机选取的,当然系统会尝试不选择哪些太满或者太忙的node)。第二个副本放置在与第一个节点不同的机架中的node中(随机选择)。第三个副本和第二个在同一个机架,随机放在不同的node中。

HDFS副本放置策略

副本放置策略的基本思想是:

  • 第一个block副本放在和client所在的node里(如果client不在集群范围内,则这第一个node是随机选取的,当然系统会尝试不选择哪些太满或者太忙的node)。
  • 第二个副本放置在与第一个节点不同的机架中的node中(随机选择)。
  • 第三个副本和第二个在同一个机架,随机放在不同的node中。
  • 如果还有更多的副本就随机放在集群的node里。

Hadoop的副本放置策略在可靠性(block在不同的机架)和带宽(一个管道只需要穿越一个网络节点)中做了一个很好的平衡。下图是备份参数是3的情况下一个管道的三个datanode的分布情况。


网络异常,图片无法展示
|


数据写入流水线复制

当客户端向 HDFS 文件写入数据的时候,一开始是写到本地临时文件中。

假设该文件的副本系数设置为 3 ,当本地临时文件累积到一个数据块的大小时,客户端会从 Namenode 获取一个 Datanode 列表用于存放副本。

然后客户端开始向第一个Datanode传输数据,第一个 Datanode 一小部分一小部分 (4 KB) 地接收数据,将每一部分写入本地仓库,并同时传输该部分到列表中第二个 Datanode 节点。第二个 Datanode 也是这样,一小部分一小部分地接收数据,写入本地仓库,并同时传给第三个 Datanode 。

最后,第三个 Datanode 接收数据并存储在本地。因此,Datanode 能流水线式地从前一个节点接收数据,并同时转发给下一个节点,数据以流水线的方式从前一个Datanode复制到下一个Datanode。

机架感知

大型Hadoop集群以机架的形式来组织的,同一个机架上不同节点间的网络状况比不同机架之间更为理想。

另外,NameNode设法将数据块副本保存在不同的机架上以提高容错性。

网络拓扑


网络异常,图片无法展示
|


有了机架感知,NameNode就可以画出上图所示的datanode网络拓扑图。D1,R1都是交换机,最底层是datanode。因此,H1的rackid=/D1/R1/H1,H1的parent是R1,R1的parent是D1。这些rackid信息可以通过topology.script.file.name配置。有了这些rackid信息就可以计算出任意两台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,/D2/R3/H7)=6  不同IDC下的datanode

注意:

  1. 当没有配置机架信息时,所有的机器Hadoop都默认在同一个默认的机架下,以名为"/default-rack",这种情况下,任何一台datanode机器,不管物理上是否属于同一个机架,都会被认为是在同一个机架下。
  2. 一旦配置topology.script.file.name,就按照网络拓扑结构来寻找datanode。topology.script.file.name这个配置选项的value指定为一个可执行程序,通常为一个脚本。


相关文章
|
5月前
|
存储 分布式计算 Hadoop
HDFS 修改副本数&fsck命令
HDFS 修改副本数&fsck命令
250 0
|
9月前
|
存储 大数据
大数据数据存储的分布式文件系统的HDFS的核心机制理解的副本策略
在 Hdfs 中,数据的复制和原理是基于块的分布式存储。
66 1
|
存储 缓存 分布式计算
Hadoop中HDFS的读写流程(面试重点)、为什么搜不到BlockPlacementPolicyDefault、网络拓扑-节点距离计算、机架感知(副本存储节点选择)
Hadoop中HDFS的读写流程(面试重点)、为什么搜不到BlockPlacementPolicyDefault、网络拓扑-节点距离计算、机架感知(副本存储节点选择)
Hadoop中HDFS的读写流程(面试重点)、为什么搜不到BlockPlacementPolicyDefault、网络拓扑-节点距离计算、机架感知(副本存储节点选择)
|
分布式计算 资源调度 Java
一脸懵逼学习Hdfs---动态增加节点和副本数量管理(Hdfs动态扩容)
1:按照上篇博客写的,将各个进程都启动起来: 集群规划:    主机名          IP                  安装的软件                        运行的进程   master     192.
1992 0
|
存储 分布式计算 Hadoop
HDFS源码分析之数据块Block、副本Replica
        我们知道,HDFS中的文件是由数据块Block组成的,并且为了提高容错性,每个数据块Block都会在不同数据节点DataNode上有若干副本Replica。那么,什么是Block?什么又是Replica?         首先,我们看下Block的定义,如下: /**...
1227 0
|
Go 负载均衡
HDFS源码分析之数据块及副本状态BlockUCState、ReplicaState
        关于数据块、副本的介绍,请参考文章《HDFS源码分析之数据块Block、副本Replica》。         一、数据块状态BlockUCState         数据块状态用枚举类BlockUCState来表示,代码如下: /** * States, ...
1187 0
|
4月前
|
存储 分布式计算 Hadoop
Hadoop系列HDFS详解
Hadoop系列HDFS详解
41 0
|
4月前
|
分布式计算 Java 大数据
【大数据技术Hadoop+Spark】HDFS Shell常用命令及HDFS Java API详解及实战(超详细 附源码)
【大数据技术Hadoop+Spark】HDFS Shell常用命令及HDFS Java API详解及实战(超详细 附源码)
229 0