共计 1980 个字符,预计需要花费 5 分钟才能阅读完成。
副本放置策略
副本放置策略的基本思想是:
第一个 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 指定为一个可执行程序,通常为一个脚本。
Hadoop 如何修改 HDFS 文件存储块大小 http://www.linuxidc.com/Linux/2013-09/90100.htm
将本地文件拷到 HDFS 中 http://www.linuxidc.com/Linux/2013-05/83866.htm
从 HDFS 下载文件到本地 http://www.linuxidc.com/Linux/2012-11/74214.htm
将本地文件上传至 HDFS http://www.linuxidc.com/Linux/2012-11/74213.htm
HDFS 基本文件常用命令 http://www.linuxidc.com/Linux/2013-09/89658.htm
Hadoop 中 HDFS 和 MapReduce 节点基本简介 http://www.linuxidc.com/Linux/2013-09/89653.htm
《Hadoop 实战》中文版 + 英文文字版 + 源码【PDF】http://www.linuxidc.com/Linux/2012-10/71901.htm
Hadoop: The Definitive Guide【PDF 版】http://www.linuxidc.com/Linux/2012-01/51182.htm
更多 Hadoop 相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13
本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-06/118465.htm