[发明专利]适用于分布式文件系统的文件随机写方法及系统有效
申请号: | 201910973982.5 | 申请日: | 2019-10-14 |
公开(公告)号: | CN110795407B | 公开(公告)日: | 2022-06-10 |
发明(设计)人: | 沈晨;杜真真;王敬平;黄子君;徐文远;周洁;褚少鹤 | 申请(专利权)人: | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) |
主分类号: | G06F16/172 | 分类号: | G06F16/172;G06F16/182 |
代理公司: | 上海段和段律师事务所 31334 | 代理人: | 李佳俊;郭国中 |
地址: | 201800 *** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 适用于 分布式 文件系统 文件 随机 方法 系统 | ||
1.一种适用于分布式文件系统的文件随机写方法,其特征在于,包括:
步骤1:将HDFS的写接口更新成支持随机写模式,使随机写操作仅影响直接修改的块或者有限的相邻块;
步骤2:扩展HDFS数据传输协议,使客户端可访问任意的数据分块;
步骤3:更新服务端数据包处理、更新校验值计算,获取数据副本更新、校验值更新;
所述步骤3包括:
步骤3.1:服务端收到Packet包后解析包头,获取该包中数据dataBuf、校验值checksumBuf、校验类型、校验长度bytesPerChecksum以及该包中数据在当前数据块的起始位置firstByteInBlock;
步骤3.2:计算数据块末尾位置offsetInBlock;
步骤3.3:调用adjustBlkAndCrcFilePosition传入firstByteInBlock值调整指向副本文件和校验文件的写文件句柄偏移位置;
步骤3.4:如果该数据包不覆盖磁盘上原始数据内容,则判断当前磁盘上最后一个校验是否为完整的chunk,获取当前校验完整信息或者当前校验不完整信息;
步骤3.5:根据当前校验完整信息,将数据包中的校验数据直接写入校验文件;
步骤3.6:根据当前校验不完整信息,则进行重新校验,从副本文件中读取不完整校验的数据,起始位置为(onDiskLen/bytesPerChecksum)*bytesPerChecksum,数据长度partialChunkSizeOnDisk为onDiskLen%bytesPerChecksum;
步骤3.7:从数据包中取出部分数据与磁盘中读取的数据拼成一个chunk,并计算出校验值,移动校验文件写句柄,将新的校验值覆盖旧校验值;
步骤3.8:如果数据包在填满一个chunk后,仍有剩余数据时,将剩余数据重新计算校验,并将校验值写入校验文件末尾;
步骤3.9:如果该数据包覆盖当前副本内容,则判断数据包起始位置和末尾位置所在的chunk是否需要重新校验;
步骤3.10:数据包起始位置所在chunk校验:从上一个chunk边界开始从副本文件中读取partialChunkSizeOnDisk长度数据和数据包中数据拼成一个chunk,并计算新的校验值;
步骤3.11:如果没有拼满一个chunk,则从offsetInBlock开始,从磁盘中读取副本数据,拼成一个chunk,若依然无法拼满一个chunk,则以零填充;
步骤3.12:校验数据包末尾位置所在chunk。
2.根据权利要求1所述的适用于分布式文件系统的文件随机写方法,其特征在于,所述步骤1包括:
步骤1.1:在DFSOutputStream类中,增加文件偏移方法seek,传入文件偏移量offset,并在方法中调用刷新或关闭当前数据管道中数据节点的连接;
步骤1.2:新增成员变量positonCurBlock用于记录当前数据块中的偏移量;
步骤1.3:新增成员变量curFileOffset用于记录当前文件中的偏移量;
步骤1.4:在seek方法中,根据传入的文件偏移量offset和当前文件偏移量;curFileOffset判断是否属于同一个数据块,获取同数据块判断结果信息或者不同数据块结果判断信息;
步骤1.5:根据同数据块判断结果信息,调用flushBuffer刷新数据,然后更新bytesCurBlock变量,记录下个数据包在数据块的偏移值;
步骤1.6:调用endBlock关闭客户端与当前数据节点的通信连接。
3.根据权利要求1所述的适用于分布式文件系统的文件随机写方法,其特征在于,所述步骤2包括:
步骤2.1:根据seek方法中发送过来的标志,DataStreamer线程中将关闭当前数据节点的连接并进行数据管道更新;
步骤2.2:根据curFileOffset向NameNode请求数据节点,与新数据节点建立数据连接;
步骤2.3:修改成员变量bytesCurBlock初始值,bytesCurBlock为传入的随机写位置在设定数据块中的位置;
步骤2.4:比较bytesCurBlock与数据块大小的值,判断数据块是否写满,获取数据块写满结果信息或者数据块未写满结果信息。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华东计算技术研究所(中国电子科技集团公司第三十二研究所),未经华东计算技术研究所(中国电子科技集团公司第三十二研究所)许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910973982.5/1.html,转载请声明来源钻瓜专利网。