Block是HDFS文件系统的最小的组成单元,它通过一个Long整数被唯一标识。每个Block会有多个副本(默认为3),为了数据的安全和高效,Hadoop默认对3个副本的存放策略如图所示。
*第一块:在本地的HDFS目录下存储一个Block。
*第二块:不同机架的某一个DataNode上存储一个Block。
*第三块:在该机器的同一个机架下的某台机器上存储最后一个Block。
这样的策略可以保证对该Block所属文件的访问能够优先在本机架上找到,如果本机架整个发生了异常,也可以在另外的机架上找到该Block的副本,这样足够效率,并且同时做到了数据的容错。
现在假如Block备份设置为3份,那么这3份一样的块是怎么复制到DataNode上的呢?Block块的备份机制如图所示。
假如第一个备份传到DataNode1上面,那么第二个备份是从DataNode1上以流的形式传输到DataNode2上面,同样,第三个备份是从DataNode2以流的形式传输到DataNode3上面的。