HDFS / Hadoop中的校验和过程

时间:2015-11-17 10:56:47

标签: hdfs

我无法理解HDFS中的校验和如何在文件写入读取时识别损坏的块。有人能详细解释我吗?

1 个答案:

答案 0 :(得分:1)

查看有关HDFS架构的Apache documentation

数据完整性

  

从DataNode获取的数据块可能已损坏。由于存储设备中的故障,网络故障或有缺陷的软件,可能会发生此损坏。

它以下面的方式工作。

  1. HDFS客户端软件实现校验和检查。当客户端创建HDFS文件时,它会计算文件每个块的校验和,并将这些校验和存储在同一HDFS命名空间中的单独隐藏文件中。

  2. 当客户端检索文件内容时,它会验证从每个DataNode收到的数据是否与存储在相关校验和文件中的校验和相匹配。

  3. 如果没有,那么客户端可以选择从另一个具有该块副本的DataNode中检索该块。

  4. 如果另一个数据节点块的校验和与隐藏文件的校验和匹配,系统将为这些数据块提供服务。

  5. 还要看一下健壮性部分。如果不考虑数据复制机制,解决方案将是不完整的。

    1. 每个DataNode定期向NameNode发送Heartbeat消息。

    2. 网络分区可能导致DataNode的一个子集失去与NameNode的连接。 NameNode通过缺少Heartbeat消息来检测此情况。

    3. NameNode将没有最近Heartbeats的DataNodes标记为已死,并且不会将任何新的IO请求转发给它们。注册到死DataNode的任何数据都不再可用于HDFS。

    4. DataNode死亡可能导致某些块的复制因子低于其指定值。 NameNode不断跟踪需要复制的块,并在必要时启动复制。

    5. 由于许多原因,可能会出现重新复制的必要性:DataNode可能变得不可用,副本可能已损坏,DataNode上的硬盘可能会失败,或者文件的复制因素可能会增加

    6. 复制方案示例:

      这取决于cluster

      的配置
      dfs.replication
      
      (Assume that it is 3)
      

      dfs.namenode.replication.min(假设它是1)

      如果一个数据节点丢失,Name节点将识别出块未被复制。然后,名称节点将复制数据块,直到满足dfs.replicaiton