HDFS学习笔记(4)IO读写操作之checksum
2016-09-13 11:59
211 查看
Datanode在把数据实际存储之前会验证数据的校验和(checksum的初始值?)。client通过pipeline把数据写入datanode. 最后一个datanode会负责检查校验和。当client从datanode读取数据时,也会检查校验和:把真实数据的校验和同datanode上的校验和进行比较。每个datanode都保存有一个checksum验证的持久化日志,日志中有当前datanode每个block最后的更新时间。当client成功验证了一个block,
它会告诉datanode, 之后datanode会更新它的日志,保存这些信息有助于检测坏磁盘。除了会在client读取数据时验证block, 每个datanode还会在后台运行一个DataBlockScanner线程来周期性验证所有存储在datanode上的block, 这用来防止物理存储媒介上出现"位衰减"。
因为HDFS保存有同一个block的多个备份, 所以它可以用好的副本来替换损坏的数据副本。如果某个client在读取数据时检测到数据错误, 在抛出ChecksumException之前,它会向namenode上报信息告知具体的bad block还有datanode, namenode会把指定的block标记为"corrupt",之后的client就不会再被定位到此block,此block也不会再被复制到其它datanode,之后namenode会调度一个此block的正常副本,以保证负载平衡,这之后损坏的block副本会被删除。
可以在对FileSystem调用open()之前调用setVerifyChecksum()来禁止校验和检测.
也可以通过在shell中执行-get,-copyToLocal命令时指定-ignoreCrc选项做到.
LocalFileSystem在client端进行了检验和生成.如果你往hdfs写一个文件filename,那么client会在与filename相同的路径下透明的创建一个包含所有block校验和信息的隐藏文件--filename.crc,检验和的chunk size通过bytes.per.checksum属性来指定,默认为512字节。chunk size也保存在.crc文件的元数据中,,所以即使bytes.per.checksum后来被改变了文件一样能被正确地解析。当文件被读取时会进行Checksum检测,如果发生错误,LocalFileSystem会抛出一个ChecksumException。
它会告诉datanode, 之后datanode会更新它的日志,保存这些信息有助于检测坏磁盘。除了会在client读取数据时验证block, 每个datanode还会在后台运行一个DataBlockScanner线程来周期性验证所有存储在datanode上的block, 这用来防止物理存储媒介上出现"位衰减"。
因为HDFS保存有同一个block的多个备份, 所以它可以用好的副本来替换损坏的数据副本。如果某个client在读取数据时检测到数据错误, 在抛出ChecksumException之前,它会向namenode上报信息告知具体的bad block还有datanode, namenode会把指定的block标记为"corrupt",之后的client就不会再被定位到此block,此block也不会再被复制到其它datanode,之后namenode会调度一个此block的正常副本,以保证负载平衡,这之后损坏的block副本会被删除。
可以在对FileSystem调用open()之前调用setVerifyChecksum()来禁止校验和检测.
也可以通过在shell中执行-get,-copyToLocal命令时指定-ignoreCrc选项做到.
LocalFileSystem在client端进行了检验和生成.如果你往hdfs写一个文件filename,那么client会在与filename相同的路径下透明的创建一个包含所有block校验和信息的隐藏文件--filename.crc,检验和的chunk size通过bytes.per.checksum属性来指定,默认为512字节。chunk size也保存在.crc文件的元数据中,,所以即使bytes.per.checksum后来被改变了文件一样能被正确地解析。当文件被读取时会进行Checksum检测,如果发生错误,LocalFileSystem会抛出一个ChecksumException。
相关文章推荐
- HDFS学习笔记(5)IO读写操作之数据压缩
- Java学习笔记——File类文件管理及IO读写、复制操作
- Java学习笔记——File类文件管理及IO读写、复制操作
- Java学习笔记——IO操作之以图片地址下载图片
- Windows 8 学习笔记(二十三)--WritableBitmap的读写操作C++
- hadoop学习笔记3:shell下的hdfs操作
- Java学习笔记——IO操作之以图片地址下载图片
- QT sqlite3数据库读取、容器操作、文件读写——学习笔记。
- Linux学习笔记2-文件读写操作
- Java学习笔记----------------常见IO操作
- Spark Hadoop集群部署与Spark操作HDFS运行详解---Spark学习笔记10
- java学习笔记(四)——io操作
- [学习笔记]Java 中对文件的读写操作之比较
- 【python学习笔记】pthon3.x中的文件读写操作
- Hadoop--学习笔记 在Eclipse中操作远程hdfs文件
- OpenCV学习笔记 cv.Mat 与 .txt 文件数据的读写操作
- C++学习笔记:IO操作
- C++学习笔记:IO操作
- java学习笔记(十三)----IO操作
- 【初学】iOS学习笔记-本地化之Plist文件读写操作