hadoop块校验和:是否也存储在namenode中?

svgewumm  于 2021-06-01  发布在  Hadoop
关注(0)|答案(2)|浏览(402)

hdfs块的校验和与块的原始内容一起存储在本地文件中,都存储在每个专用数据节点(副本)上。
我想知道:块的校验和是否也存储在namenode中,作为文件元数据的一部分?

vltsax25

vltsax251#

简而言之:校验和存储在数据节点上
说明:
hdfs透明地对写入其中的所有数据进行校验和,并且在读取数据时默认验证校验和。为每个dfs.bytes-perchecksum字节的数据创建单独的校验和。默认值是512字节,因为crc-32c校验和是4字节长,所以存储开销小于1%。
datanodes负责在存储数据及其校验和之前验证它们接收到的数据。这适用于它们在复制期间从客户端和其他数据节点接收的数据。
写入数据的客户机将数据发送到数据节点管道,管道中的最后一个数据节点验证校验和。
如果datanode检测到错误,客户机将收到ioexception的子类,它应该以特定于应用程序的方式(例如,通过重试操作)处理该子类。
当客户机从datanodes读取数据时,它们也会验证校验和,并将校验和与存储在datanodes上的校验和进行比较。每个datanode都保存一个校验和验证的持久日志,因此它知道上一次验证每个块的时间。
当客户机成功验证一个块时,它会告诉datanode,datanode会更新它的日志。保存这样的统计信息对于检测坏磁盘很有价值。
除了对客户端读取进行块验证之外,每个datanode在后台线程中运行datalockscanner,该线程定期验证datanode上存储的所有块。这是为了防止由于物理存储介质中的“位腐烂”而导致的损坏。
参见“hadoop最终指南第4版第98页”

bwitn5fc

bwitn5fc2#

否。校验和只与从节点上的块一起存储[有时也称为数据节点]。
来自apache的hdfs文档
数据完整性
从datanode获取的数据块可能已损坏。这种损坏可能是由于存储设备故障、网络故障或有缺陷的软件造成的。
它的工作方式如下。
hdfs客户机软件实现校验和检查器。当客户机创建一个hdfs文件时,它计算该文件的每个块的校验和,并将这些校验和存储在同一hdfs命名空间中的一个单独的隐藏文件中。
当客户端检索文件内容时,它将验证从每个datanode接收的数据是否与存储在关联校验和文件中的校验和匹配。
如果没有,那么客户机可以选择从另一个具有该块副本的datanode检索该块。
如果另一个数据节点块的校验和与隐藏文件的校验和匹配,系统将为这些数据块提供服务。

相关问题