赞
踩
流水线复制
当客户端向 HDFS 文件写入数据的时候,一开始是写到本地临时文件中。假设该文件的副 本系数设置为 3 ,当本地临时文件累积到一个数据块的大小时,客户端会从 Namenode 获取一个 Datanode 列表用于存放副本。然后客户端开始向第一个 Datanode 传输数据,第一个 Datanode 一小部分一小部分 (4 KB) 地接收数据,将每一部分写入本地仓库,并同时传输该部分到列表中 第二个 Datanode 节点。第二个 Datanode 也是这样,一小部分一小部分地接收数据,写入本地 仓库,并同时传给第三个 Datanode 。最后,第三个 Datanode 接收数据并存储在本地。因此, Datanode 能流水线式地从前一个节点接收数据,并在同时转发给下一个节点,数据以流水线的 方式从前一个 Datanode 复制到下一个 .
机架感知:
副本的放置对HDFS的可靠性和性能至关重要。机架感知副本放置策略的目的是提高数据可靠性、可用性和网络带宽利用率。
大型HDFS实例运行在通常分布在多个机架上的计算机集群上。不同机架上的两个节点之间的通信必须通过交换机。在大多数情况下,同一机架中的计算机之间的网络带宽大于不同机架中的计算机之间的网络带宽。
NameNode通过中确定每个DataNode所属的机架id,一个简单但非最佳的策略是将副本放在唯一的机架上。这可以防止整个机架发生故障时丢失数据,并允许在读取数据时使用多个机架的带宽。此策略在群集中均匀分布副本,这使得在组件故障时很容易平衡负载。但是,此策略会增加写入成本,因为写入操作需要将块传输到多个机架。
HDFS默认放置策略是将一个副本放在本地机架的一个节点上,另一个副本放在本地机架的不同节点上,最后一个副本放在不同机架的不同节点上。
当DataNode读取Block的时候,它会计算CheckSum。如果计算后的CheckSum,与Block创建时值不一样,说明Block已经损坏。Client读取其他DataNode上的Block。DataNode在其文件创建后周期验证CheckSum,如图:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。