HDFS数据完整性校验研究

目录:

1.hdfs 数据完整性介绍

2.hdfs 数据完整性校验机制:

3.LocalFileSystem

 

一. hdfs 数据完整性介绍:

IO操作过程中难免会出现数据丢失或脏数据,数据传输得量越大出错得几率越高。校验错误最常用得办法就是传输前计算一个校验和,传输后计算一个校验和,两个校验和如果不相同就说明数据存在错误,比较常用得错误校验码是CRC32.

 

二. hdfs 数据完整性校验机制:

hdfs存在两个校验机制:

2.1 读写数据时效验和

HDFS实现了对HDFS文件内容的校验和检测(CRC循环校验码):

Hdfs写流程中,会对所有数据进行计算效验和: 客户端将数据和效验和通过管道流发送到多个datanode节点上,并在管道最后一个节点上验证效验和,如果校验失败则抛出IO异常,如果成功则写入crc隐藏文件;

HDFS读流程中,读取数据节点数据也会验证效验和,校验数据后与数据及节点中存储的效验和(隐藏的crc文件中的效验和)进行比较,如果不一致则上报坏块并选择其他节点读取。每个数据节点都持久化一个用于验证的校验和日志。客户端成功验证一个数据块后,会告诉这个数据节点,数据节点由此更新日志。

由于hdfs储存着每个数据块的备份,它可以通过复制完好的数据备份来修复损坏的数据块来恢复数据。

2.2 BlockScanner

BlockScanner,定期验证存储在这个数据节点上的所有数据项(具体工作由多个volumeScanner线程执行),该项措施是为解决物理存储介质上的损坏。DataBlockScanner是作为数据节点上的一个后台线程工作的,跟着数据节点同时启动,由于对数据节点上的每一个数据块扫描一遍要消耗较多的系统资源,一次扫描周期的值一般以较大,这就带来另一个问题,就是在一个扫描周期内可能出现数据节点重启的情况,所以为了提高系统性能,避免数据节点在启动后对还没有过期的数据块又扫描一遍,DataBlockScanner在其内部使用了日志记录器来持久化保存每一个数据块上一次的扫描时间,这样数据节点可以在启动之后通过日志文件来恢复之前所有的数据块的有效时间。

 

三. LocalFileSystem:

Hadoop的LocalFileSystem类是用来执行客户端的校验和验证。

当写入一个名为filename的文件时文件系统客户端会透明地在包含文件块校验和的同一目录内建立一个名为Filename.crc的隐藏文件。校验文件大小的字节数由io.bytes.per.checksum属性设置,默认是512bytes,即每512字节就生成一个CRC-32校验和。事实上LocalFileSystem是通过继承ChecksumFileSystem实现校验的工作。LocalFileSystem类通过ChecksumFileSystem类来完成自己的任务FileSystem rawFs;FileSystem checkssummedFs=new ChecksumFileSystem(rawFS);可以通过CheckFileSystem的getRawFileSystem()方法获取源文件系统。当检测到错误时,CheckFileSystem类会调用reportCheckSumFailure()方法报告错误,然后LocalFileSystem将这个出错的文件和校验和移动到名为bad——files的文件夹内,管理员可以定期检查这个文件夹。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HDFS(Hadoop分布式文件系统)是一种用于存储大规模数据的分布式文件系统。将HDFS中的数据导出至MySQL内可以通过以下步骤实现: 1. 数据提取:首先,需要从HDFS中提取数据。可以使用Hadoop的命令行工具或编写MapReduce程序来读取HDFS中的数据。根据数据的格式和结构,选择合适的方法进行数据提取。 2. 数据转换:HDFS中的原始数据可能是以不同格式或结构存在的,需要将其转换成MySQL可以接受的格式。这包括对数据进行清洗、格式化、转换等操作,以保证数据的一致性和完整性。 3. 数据加载:将转换后的数据加载至MySQL中。可以使用MySQL提供的命令行工具、GUI工具或编写脚本来实现数据加载。在加载过程中,需要创建相应的数据库、表和字段,并将数据插入到对应的表中。 4. 数据校验:加载完成后,需要对数据进行校验以确保数据的准确性和完整性。可以针对数据的一些关键字段或条件进行查询和比对,确保导入的数据HDFS中的原始数据一致。 5. 数据迁移:如果需要持续将HDFS中的数据导入MySQL中,可以编写定时任务或使用工作流调度工具,定期执行数据导出的操作,以实现数据的自动迁移和同步。 总之,将HDFS中的数据导出至MySQL内需要经过数据提取、转换、加载、校验和迁移等步骤。这些步骤需要结合具体的数据特点和业务需求,选择合适的方法和工具,并确保数据完整性和一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值