Hadoop块校验和:也存储在namenode中?

时间:2018-03-08 18:44:21

标签: hadoop hdfs namenode

HDFS块的校验和与每个专用数据节点(副本)上的本地文件以及块的原始内容一起存储。

我想知道:作为文件元数据的一部分,在namenode中存储的块的校验和是什么?

感谢。

2 个答案:

答案 0 :(得分:1)

没有。校验和仅与从属节点上的块一起存储[有时也称为数据节点]。

来自Apache文档的HDFS

  

数据完整性

     

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

它的工作方式如下。

  1. HDFS客户端软件实现校验和检查。当客户端创建HDFS文件时,它会计算文件每个块的校验和,并将这些校验和存储在同一HDFS命名空间中的单独隐藏文件中。
  2. 当客户端检索文件内容时,它会验证从每个DataNode收到的数据是否与存储在相关校验和文件中的校验和相匹配。
  3. 如果没有,那么客户端可以选择从另一个具有该块副本的DataNode中检索该块。
  4. 如果另一个数据节点块的校验和与隐藏文件的校验和匹配,系统将为这些数据块提供服务。
  5. 希望有所帮助!

答案 1 :(得分:0)

简短答案:校验和存储在数据节点上

说明

  1. HDFS透明地校验所有写入其中的数据,并且默认情况下会在读取数据时验证校验和。为每个dfs.bytes-perchecksum字节数据创建一个单独的校验和。默认值为512字节,并且由于CRC-32C校验和为4个字节长,因此存储开销小于1%。
  2. Datanode负责在存储数据及其校验和之前验证接收到的数据。这适用于他们在复制期间从客户端和其他数据节点接收的数据。
  3. 写入数据的客户端将其发送到数据节点的管道,管道中的最后一个数据节点验证校验和。
    • 如果datanode检测到错误,则客户端将接收IOException的子类,它应以特定于应用程序的方式处理(例如,通过重试操作)。
  4. 客户端从数据节点读取数据时,也会验证校验和,并将其与存储在数据节点中的校验和进行比较。每个数据节点都保留一个校验和验证的持久日志,因此它知道每个块的最后验证时间。
  5. 当客户端成功验证块时,它会告诉datanode更新其日志。保留此类统计信息对于检测坏磁盘很有用。
  6. 除了对客户端读取进行块验证以外,每个数据节点还在后台线程中运行一个DataBlockScanner,该线程定期验证存储在该数据节点上的所有块。这是为了防止由于物理存储介质中的“位腐烂”而造成损坏。

请参见“确定最终指南第4版第98页”