CN104778097B - 一种数据恢复方法及装置 - Google Patents
一种数据恢复方法及装置 Download PDFInfo
- Publication number
- CN104778097B CN104778097B CN201510142725.9A CN201510142725A CN104778097B CN 104778097 B CN104778097 B CN 104778097B CN 201510142725 A CN201510142725 A CN 201510142725A CN 104778097 B CN104778097 B CN 104778097B
- Authority
- CN
- China
- Prior art keywords
- data block
- field
- value
- data
- key
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据恢复方法及装置,该方法包括:确定数据文件中包含的各子文件,扫描各子文件中的数据块,确定出各子文件中满足第一预设条件的数据块,在确定出的各数据块中,扫描满足第二预设条件的键值对,保存扫描出的键值对,作为恢复出的数据文件。因此,虽然存储在数据库中的文件会因为一些因素而彻底丢失掉文件中的某一数据,导致存储在数据库中的文件不能继续被读取和使用了,对于用户来说损失较大,但是通过上述方法,可以将文件中剩余没有丢失的数据恢复出来,可降低用户的损失。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种数据恢复方法及装置。
背景技术
随着网络的不断发展,为用户提供服务的方法已经由软件即服务(software as aservice,saas)的方式转变为平台即服务(platform as a service,paas)的方式,hbase数据库就是建立paas之上的,主要用于为用户提供存储空间。
在实际应用中,在paas环境下的hbase数据库没有对数据备份的功能,因此在存储数据的过程中,为了保证数据的安全性,通常会将具有备份功能的hadoop(hadoop通常是指hbase数据库中所存在的一种数据存储层级)与hbase数据库整合在一起使用,因此数据在数据库(如hbase)中会形成若干个备份存入到若干个物理磁盘中,只要有一个物理磁盘没有损坏,数据就没有丢失或损坏,而是完整的存储了下来,这些数据可供用户再次读取和使用。
但是数据在数据库(如hbase)中存储时,如果hadoop文件的数据在物理磁盘中出现了彻底的丢失,就会致使该数据无法被正常的读取和使用,在现有技术中,数据中的一部分彻底丢失,是无法被恢复的,这样就导致整个数据不能继续读取和使用了。
例如,hbase中一个逻辑存储文件hfile(存储大小为192MB)里存储了某一用户的数据,该hfile文件在进行存储的过程中,会先在hadoop层分成三份:hadoop1,hadoop2,hadoop3,每个hadoop文件里存储了64MB大小的数据,每个hadoop文件会分别在若干个物理磁盘中进行存储,假设所有物理磁盘上的hadoop2文件彻底的丢失了,用软件也无法找回,这样对于整个hfile文件来说是不完整的,因此就会致使整个hfile文件不能继续被使用和读取,hfile文件内的hadoop1文件和hadoop3文件也无法继续被读取和使用了。
从上述例子看出,一个逻辑存储文件hfile中某一部分的hadoop文件在物理磁盘上彻底丢失了就会导致整个hfile数据不能继续被用户读取和使用,并且剩余没有丢失的数据也无法被继续读取和使用了,对于用户来说,一部分数据的彻底丢失导致整个数据的不能继续被读取和使用,损失较大。
发明内容
本发明实施例提供一种数据恢复方法及装置,用以解决现有技术中数据库内的文件因某一部分数据丢失而导致该文件不能被继续读取和使用,损失较大的问题。
本发明实施例提供的一种数据恢复方法方法,包括:
确定数据文件中包含的各子文件;
扫描各子文件中的数据块,确定出各子文件中满足第一预设条件的数据块;
在确定出的各数据块中,扫描满足第二预设条件的键值对;
保存扫描出的键值对,作为恢复出的数据文件。
本发明实施例提供的一种数据恢复装置,包括:
确定模块,用于确定数据文件中包含的各子文件;
第一扫描模块,用于扫描各子文件中的数据块,确定出各子文件中满足第一预设条件的数据块;
第二扫描模块,用于在确定出的各数据块中,扫描满足第二预设条件的键值对;
存储模块,用于保存扫描出的键值对,作为恢复出的数据文件。
本发明实施例提供一种数据恢复方法及装置,该方法针对要恢复的数据文件,确定数据文件中包含的各子文件,扫描各子文件中的数据块,确定出各子文件中满足第一预设条件的数据块,在确定出的各数据块中,扫描满足第二预设条件的键值对,保存扫描出的键值对,作为恢复出的数据文件。因此,虽然存储在数据库中的文件会因为一些因素而彻底丢失掉文件中的某一数据,导致存储在数据库中的文件不能继续被读取和使用了,对于用户来说损失较大,但是通过上述方法,可以将文件中剩余没有丢失的数据恢复出来,可降低用户的损失。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明实施例提供的数据恢复方法的过程示意图;
图2为本发明实施例提供的hbase数据块中逻辑文件hfile的实际存储示意图;
图3为本发明实施例提供的子文件与数据块的包含关系示意图;
图4为本发明实施例提供的无校验数据块的结构示意图;
图5为本发明实施例提供的有校验数据块的结构示意图
图6为本发明实施例提供的键值对的结构示意图。
图7为本发明实施例提供的数据恢复装置的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明具体实施例及相应的附图对本发明技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例提供的数据恢复过程,具体包括以下步骤:
S101:确定数据文件中包含的各子文件。
在本发明实施例中,数据恢复设备针对要恢复数据的文件,首先要确定数据文件中包含的各数据的子文件。
所述数据文件是存储在数据库中的用户数据所形成的文件,如:以hbase数据库中的逻辑文件hfile为例,所述的子文件是用户数据文件内包含的子文件,如:hfile对应的hadoop文件(hadoop文件是位于hadoop层中的文件),数据库在写入用户数据的过程中,会将用户的数据写入到hfile中,hbase数据库中的hfile对应到hadoop层将变成N份hadoop文件,hadoop文件内存放了用户的数据,每一个hadoop文件会分别存储在每一个物理磁盘中。
hbase数据库本身没有备份功能,通过与hadoop结合在一起,就可以将用户存入到数据库中的用户数据在相应的存储设备中的多个物理磁盘上形成备份,只要有一个物理磁盘没有损坏,存入到hbase数据库中的数据文件就不会丢失,这样就保证了用户数据的安全性。
S102:扫描各子文件中的数据块,确定出各子文件中满足第一预设条件的数据块。
在本发明实施例中,一个子文件内可包含多个数据块,数据库在存放用户数据时,数据库会对用户的数据进行加工并存放在数据块中的数据部分,在整个数据块中数据部分的前缀部分(或者后缀部分)会加上固定的字段,固定的字段会写入相应的数据信息,从而形成一个完整的数据块结构。在数据恢复的过程中,数据恢复设备对各子文件中的数据块进行扫描,通过数据块中的前缀部分(或者后缀部分)找出那些具有完整数据块结构的数据块。
因此,上述步骤S102中,所述满足第一预设条件,就是满足上述数据部分的前缀部分(或后缀部分)的固定字段。
S103:在确定出的各数据块中,扫描满足第二预设条件的键值对;
在本发明实施例中,所述键值对存储在所述数据块的数据部分内,每个数据部分中可包含多个键值对,键值对内存入的是用户真实的数据。
所述键值对中包含有多个固定的字段,用于存储用户的数据。也即,数据库会对用户的数据进行加工,使其数据的格式符合该键值对的数据结构,并将用户的数据存储在键值对中。
因此,上述步骤S103中,所述满足第二预设条件,就是满足上述数据部分中的各键值对的多个固定的字段。
在数据恢复的过程中,数据恢复设备对满足上述步骤S102中的所述第一预设条件的数据块进行扫描,找出那些具有完整键值对数据结构的键值对。
S104:保存扫描出的键值对,作为恢复出的数据文件。
在本申请实施例中,数据恢复设备在扫描数据文件的过程中,通过校验找到了满足第一预设条件的数据块,在满足第一预设条件的数据块中找到满足第二预设条件的键值对,解析出键值对中各个字段所包含的数据,将这些字段内的数据保存到新的键值对中,并将这些键值对作为恢复出的数据文件保存到新的数据库中,从而完成数据恢复过程。
通过完成上述步骤,hfile中未丢失的数据文件就恢复并保存了下来,这样就降低了用户的损失。
在本发明实施例中,在所述数据文件为hbase数据库中的逻辑文件hfile,所述子文件为hfile对应的hadoop文件的场景下,对于上述步骤S101而言,确定数据文件中包含的各子文件,具体为:确定hbase数据库中hfile对应的各hadoop文件。
例如,如图2所示,用户在向hbase数据库中存入数据的过程中,假设这个hfile有150M,hadoop文件默认为64M,那么hfile对应到hadoop层就变成了三个文件:第一个hadoop文件A是64M,第二个hadoop文件B是64M,第三个hadoop文件C是22M。每个hadoop文件都会存入三个不同的物理磁盘中,如:物理磁盘1,物理磁盘2,物理磁盘3,hadoop文件A在物理磁盘1上存储为A1,在物理磁盘2上存储为A2,在物理磁盘3上存储为A3,hadoop文件B在物理磁盘1上存储为B1,在物理磁盘2上存储为B2,在物理磁盘3上存储为B3,hadoop文件C在物理磁盘1上存储为C1,在物理磁盘2上存储为C2,在物理磁盘3上存储为C3,物理磁盘1上存储了A1,B1,C1,物理磁盘2上存储了A2,B2,C2,物理磁盘3上存储了A3,B3,C3,当然,图2中的这三个物理磁盘可以存放在不同位置。
通过上例可见,hbase数据库中的hfile在hadoop层分成不同的子文件,就可以将用户存入到数据库中的数据分别以子文件的方式,存储在多个物理磁盘上形成备份,只要有一个物理磁盘没有损坏,那么,存入到hbase数据库中的数据文件就可以被读取。
在本发明实施例中,hbase数据库中的hfile所对应的各子文件,均划分为多个数据块进行存储,对于任一子文件而言,其存储在hbase数据库中的数据结构如图3所示,某一子文件被分成N个数据块存储hbase数据库中。
在如图3所示的方式下,扫描各子文件时,其实也就是要扫描这些子文件中的各数据块,因此,对于上述步骤S102而言,扫描各子文件中的数据块,具体为:针对每个子文件,根据该子文件中包含的各数据块的排序,依次扫描该子文件中的各数据块;其中,在扫描一个数据块时,是按照从该数据块中的第一字节到最后一个字节依次扫描的。
数据恢复设备在扫描数据文件确定数据块的过程中,先要对数据块进行检验,找到满足要求(也即第一预设条件)的数据块,在所述hfile未压缩的情况下,对各hadoop文件中所包含的每个数据块进行校验,根据hbase数据库的配置文件中所记录的数据块是有检验数据块还是无校验数据块,校验过程分为两种情况:
第一种情况为:hbase数据库中的数据块是无校验数据块。如图4所示,是无校验数据块的数据块结构示意图,其中blocktype字段代表的是数据块的开头标识,如果数据未编码,该字段的内容是DATABLK*,如果数据编码,该字段的内容是DATABLKE。compressedblocksize字段代表压缩后的数据部分blockdata的大小,uncompressedblocksize字段代表的是未压缩的数据部分blockdata的大小。preblockoffset字段表示的是上一个数据块相对整个hfile的偏移量。blockdata字段代表的是数据部分。
当该数据块是无校验数据块时,当数据恢复设备读取hfile的子文件中任意8个字节的内容是DATABLK*或DATABLKE时,则认为当前是一个数据块的开头,进而需要进入下一步的扫描,否则将顺序扫描该子文件中的剩余字节,从剩余的字节中找到存在8个字节的内容是DATABLK*或DATABLKE的字段,作为数据块的开头。
数据恢复设备会顺序地读取compressedblocksize和uncompressedblocksize字段,在hfile未压缩的情况下,如果这两个字段的值大小相等且均大于等于数据块中的数据部分blockdata的大小(在默认状态下,一个数据块中的数据部分blockdata大小是64K),进而数据恢复设备可以进入下一步的扫描,否则将顺序扫描数据文件中的剩余字节,从剩余的字节中找到存在8个字节的内容是DATABLK*或DATABLKE的字段(也即,重新扫描新的数据块)。
数据恢复设备会顺序地读取preblockoffset字段,这个字段的值表示的是上一个数据块相对整个hfile的偏移量,如果该数据块的preblockoffest值和前一个数据块记录的起始位置相等,则通过校验,直接确定出数据块的数据部分(block data),否则将继续扫描数据文件中的剩余字节,从剩余的字节中找到存在8个字节的内容是DATABLK*或DATABLKE的字段。
第二种情况为:hbase数据库中的数据块是有校验数据块,如图5所示,是有校验数据块的数据块结构示意图,其中blocktype字段代表的是数据块的开头标识,如果数据未编码,该字段的内容是DATABLK*,如果数据编码,该字段的内容是DATABLKE。compressedblocksize字段代表压缩后的数据部分blockdata的大小,uncompressedblocksize字段代表的是未压缩的数据部分blockdata的大小。preblockoffset字段表示的是上一个数据块相对整个hfile的偏移量。checksumtype字段表示的是校验的类型。bytesperchecksum字段表示的是数据部分多少字节进行一次校验(这个值是已知的)。sizedataondisk字段表示的数据部分的大小。blockdata字段代表的是数据部分。checksumchunk字段代表预设校验比对标准。
当数据恢复设备读取hfile中任意8个字节的内容是DATABLK*或DATABLKE时,则可以认为当前是一个数据块的开头,进而需要进入下一步的扫描,否则将顺序扫描数据文件中的剩余字节,从剩余的字节中找到存在8个字节的内容是DATABLK*或DATABLKE的字段。
数据恢复设备会顺序地读取compressedblocksize和uncompressedblocksize字段,在hfile未压缩的情况下,如果这两个字段的值大小不相等且均大于等于数据块中的数据部分blockdata的大小,进而数据恢复设备可以进入下一步的扫描,否则将继续扫描数据文件中的剩余字节,从剩余的字节中找到存在8个字节的内容是DATABLK*或DATABLKE的字段,作为数据块的开头。
数据恢复设备会顺序地读取preblockoffset字段,这个字段的值表示的是上一个数据块相对整个hfile的偏移量,如果该数据块的preblockoffest值和前一个数据块记录的起始位置相等,则数据恢复设备进入下一步的扫描,否则将继续扫描数据文件中的剩余字节,从剩余的字节中找到存在8个字节的内容是DATABLK*或DATABLKE的字段(也即,重新扫描新的数据块)。
数据恢复设备会顺序地读取checksumtype字段,checksumtype字段是一种标识,数据恢复设备可以根据该checksumtype字段确定校验的类型。
数据恢复设备会顺序地bytesperchecksum字段,这个字段的值是是已知的,数据恢复设备会将该字段的值与hbase数据库的配置文件中参数hbase.hstore.bytes.per.checksum进行对比,如果错误则继续扫描数据文件中的剩余字节,从剩余的字节中找到存在8个字节的内容是DATABLK*或DATABLKE的字段,如果没有错误则进入下一步的扫描。
数据恢复设备会顺序地读取sizedataondisk字段,该字段表示的数据部分的大小。
通过以上的字段校验后,如果被扫描的子文件中的数据符合上述各字段,则可以认为是一个完整的数据块,从而数据恢复设备直接可以读取数据块的数据部分,对数据进行恢复。
而在所述hfile被压缩的情况下,对各hadoop文件中所包含的每个数据块进行校验,根据hbase数据库的配置文件中所记录的数据块是有检验数据块还是无校验数据块,校验过程仍然分为两种情况:
第一种情况为:hbase数据库中的数据块是无校验数据块。如图4所示,是无校验数据块的数据块结构示意图,其中blocktype字段代表的是数据块的开头标识,如果数据未编码,该字段的内容是DATABLK*,如果数据编码,该字段的内容是DATABLKE。compressedblocksize字段代表压缩后的数据部分blockdata的大小,uncompressedblocksize字段代表的是未压缩的数据部分blockdata的大小。preblockoffset字段表示的是上一个数据块相对整个hfile的偏移量。blockdata字段代表的是数据部分。
当该数据块是无校验数据块时,当数据恢复设备读取hfile的子文件中任意8个字节的内容是DATABLK*或DATABLKE时,则认为当前是一个数据块的开头,进而需要进入下一步的扫描,否则将顺序扫描该子文件中的剩余字节,从剩余的字节中找到存在8个字节的内容是DATABLK*或DATABLKE的字段,作为数据块的开头。
数据恢复设备会顺序地读取compressedblocksize和uncompressedblocksize字段,在hfile被压缩的情况下,如果这两个字段的值大小不等,且uncompressedblocksize字段的值大于等于数据块中的数据部分blockdata的大小(在默认状态下,一个数据块中的数据部分blockdata大小是64K),进而数据恢复设备可以进入下一步的扫描,否则将顺序扫描数据文件中的剩余字节,从剩余的字节中找到存在8个字节的内容是DATABLK*或DATABLKE的字段(也即,重新扫描新的数据块)。
数据恢复设备会顺序地读取preblockoffset字段,这个字段的值表示的是上一个数据块相对整个hfile的偏移量,如果该数据块的preblockoffest值和前一个数据块记录的起始位置相等,则通过校验,直接确定出数据块的数据部分(block data),否则将继续扫描数据文件中的剩余字节,从剩余的字节中找到存在8个字节的内容是DATABLK*或DATABLKE的字段。
第二种情况为:hbase数据库中的数据块是有校验数据块,如图5所示,是有校验数据块的数据块结构示意图,其中blocktype字段代表的是数据块的开头标识,如果数据未编码,该字段的内容是DATABLK*,如果数据编码,该字段的内容是DATABLKE。compressedblocksize字段代表压缩后的数据部分blockdata的大小,uncompressedblocksize字段代表的是未压缩的数据部分blockdata的大小。preblockoffset字段表示的是上一个数据块相对整个hfile的偏移量。checksumtype字段表示的是校验的类型。bytesperchecksum字段表示的是数据部分多少字节进行一次校验(这个值是已知的)。sizedataondisk字段表示的数据部分的大小。blockdata字段代表的是数据部分。checksumchunk字段代表预设校验比对标准。
当数据恢复设备读取hfile中任意8个字节的内容是DATABLK*或DATABLKE时,则可以认为当前是一个数据块的开头,进而需要进入下一步的扫描,否则将顺序扫描数据文件中的剩余字节,从剩余的字节中找到存在8个字节的内容是DATABLK*或DATABLKE的字段。
数据恢复设备会顺序地读取compressedblocksize和uncompressedblocksize字段,在hfile被压缩的情况下,如果这两个字段的值大小不等,且uncompressedblocksize字段的值大于等于数据块中的数据部分blockdata的大小(在默认状态下,一个数据块中的数据部分blockdata大小是64K),进而数据恢复设备可以进入下一步的扫描,否则将继续扫描数据文件中的剩余字节,从剩余的字节中找到存在8个字节的内容是DATABLK*或DATABLKE的字段,作为数据块的开头。
数据恢复设备会顺序地读取preblockoffset字段,这个字段的值表示的是上一个数据块相对整个hfile的偏移量,如果该数据块的preblockoffest值和前一个数据块记录的起始位置相等,则数据恢复设备进入下一步的扫描,否则将继续扫描数据文件中的剩余字节,从剩余的字节中找到存在8个字节的内容是DATABLK*或DATABLKE的字段(也即,重新扫描新的数据块)。
数据恢复设备会顺序地读取checksumtype字段,checksumtype字段是一种标识,数据恢复设备可以根据该checksumtype字段确定校验的类型。
数据恢复设备会顺序地bytesperchecksum字段,这个字段的值是是已知的,数据恢复设备会将该字段的值与hbase数据库的配置文件中参数hbase.hstore.bytes.per.checksum进行对比,如果错误则继续扫描数据文件中的剩余字节,从剩余的字节中找到存在8个字节的内容是DATABLK*或DATABLKE的字段,如果没有错误则进入下一步的扫描。
数据恢复设备会顺序地读取sizedataondisk字段,该字段表示的数据部分的大小。
通过以上的字段校验后,如果被扫描的子文件中的数据符合上述各字段,则可以认为是一个完整的数据块,从而数据恢复设备直接可以读取数据块的数据部分,对数据进行恢复。
对于上述步骤S103而言,在本发明实施例中,如图6所示,是键值对的数据结构示意图,键值对中包括多个键值项(这些键值项统称为key)和键值,这些键值项就是不同类型的数据标识,通过这些数据标识,就可以确定出键值(也即,图6中的value中的存储的用户的数据),在图6中:key length字段表示的是图中key的长度(各键值项的总长度)。valuelength字段表示的是value的长度。row length字段表示的是键值对中row的长度。row字段表示的是上层应用中的键,也称作键值名,它是根据解析出来的row length的长度读取指定的字节数而得到的。column family length字段表示的是column family的长度,该长度在创建时就已经定义好的,即长度是已知的。column family字段表示的是列族,一个列族由多个列组成(如:对于数据表而言,存在多个数据列),该字段的内容都是已知的一些枚举类型。column qualifier字段表示的是列族里列的名字,这个值是已知的。time stamp字段表示时间戳,也即每次数据操作对应的时间记录,可以看做是数据的版本号(记录的时间不会在所述hbase数据库的建立时间之前,也不会超过当前时间)。key type字段表示的是key的类型,内容都是已知固定的枚举类型。value字段中存储的是用户的数据。
针对一个待定的键值对,数据恢复设备读取到数据部分中待定键值对的keylength字段,这个字段代表了键值对的key的长度,这个字段的值应该是大于0并且小于等于所述key length字段所能表示的最大数值,如:key length字段占有4个字节,因此keylength所能表示的最大位(bit)是231-1,如果满足则进入下一步检验,如果不满足则继续扫描数据文件中的剩余字节,从剩余的字节中找到存在8个字节的内容是DATABLK*或DATABLKE的字段。
当读取到数据部分中待定键值对的value length字段,这个字段代表了键值对的value的长度,这个字段的值应该是大于0并且小于等于所述value length字段所能表示的最大数值,如:value length字段占有4个字节,因此value length所能表示的最大bit是231-1,如果满足则进入下一步检验,如果不满足则继续扫描数据文件中的剩余字节,从剩余的字节中找到存在8个字节的内容是DATABLK*或DATABLKE的字段。
当读取待定键值对value length字段后面的row length字段,该字段表示的用户存入数据库中的键值(也即value)的键值名的长度,这个长度的值是能确定的,对此需要做一个范围判断,如果row length字段的值处于预定的范围内(如:预定范围是2字节的长度),那么则进入下一步解析,如果不满足则直接丢失该键值对。
当读取row字段时,如果row字段的结构与预设的结构信息相同,如:预设的结构信息包括row字段的前缀和后缀等,那么则进入下一步解析,如果不满足则直接丢失该键值对。
当读取待定键值对中的column family length字段,如果column family length字段的值与该待定键值对被创建时所确定的指定字段column family的长度值相同,那么则进入下一步解析,如果不满足则继续进行解析,但是解析完整个键值对后,该键值对直接丢失。
当读取待定键值对中的column family字段,如果该字段的内容与已知定义好的内容相同,那么则进入下一步解析,如果不满足则直接丢失该键值对。
当读取待定键值对中的column qualifier字段,该字段的值是已知的,如果column qualifier字段的内容与已知的内容相同,那么则进入下一步解析,如果不满足则直接丢失该键值对。
当读取待定键值对中的times tamp字段,该字段内记录了时间信息,如果该timestamp字段所表示的时间不在所述hbase数据库的建立时间之前并且小于当前时间,那么则进入下一步解析,如果不满足则直接丢失该键值对。
当读取待定键值对中的key type字段,该字段的内容是已知的,如果该keytype字段的内容与已知的内容相同,那么则进入下一步解析,如果不满足则直接丢失该键值对。
当全部完成上述的解析步骤后,就可以认为上层应用的一个键值对恢复成功,将解析出来的这条键值对的row,column family,column qualifier,time stamp,key type,value的字段创建一个新的键值对,这个键值对就是恢复出来的数据文件,将数据文件存放在其他hbase数据库中。
综上所述,数据恢复设备在扫描子文件中数据的过程中,先要扫描出满足第一预设条件的数据块,再从该数据块中确定并解析出满足第二预设条件的键值对。每扫描出一个满足第一预设条件的数据块,就从该数据块中的数据部分blockdata中确定并解析满足第二预设条件的键值对。在确定并解析满足第二预设条件的键值对时,只要key length和value length字段不符合要求,则说明该满足第一预设条件的数据块解析不正确,要将该数据块整个舍弃掉,并顺序读取接下来的字节继续需找下一个满足第一预设要求的数据块,若key length和value length字段符合要求,则该满足第一预设条件的数据块对前面字段的解析正确,即该数据块为正确的数据块,直接从顺序读取该数据块的剩余字节,对键值对的剩余字段进行解析,若在解析剩余字段的过程中,某一字段的解析不成功,则说明当前解析的键值对不正确,但满足第一预设条件的该数据块中很可能还存在其他正确的键值对,因此继续顺序读取字节对接下来的字段进行解析,当解析完整个键值对时,直接将该不正确的键值对舍弃掉,顺序扫描接下来的字节寻找新的正确的键值对,直到扫描完该数据块的所有字节,将解析成功的键值对作为恢复文件存放在其他hbase数据库中。
以上为本发明实施例提供的数据恢复方法,基于同样的思路,本发明实施例还提供一种数据恢复装置。
如图7所示,本发明实施例提供的一种数据恢复装置包括:
确定模块701,用于确定数据文件中包含的各子文件;
第一扫描模块702,用于扫描各子文件中的数据块,确定出各子文件中满足第一预设条件的数据块;
第二扫描模块703,用于在确定出的各数据块中,扫描满足第二预设条件的键值对;
存储模块704,用于保存扫描出的键值对,作为恢复出的数据文件。
在本发明实施例中,所述确定模块701,具体用于,确定hbase数据库中hfile对应的各hadoop文件。
所述第一扫描模块702,具体用于,针对每个子文件,根据该子文件中包含的各数据块的排序,依次扫描该子文件中的各数据块;
其中,在扫描一个数据块时,是按照从该数据块中的第一字节到最后一个字节依次扫描的。
所述第一扫描模块702,具体用于,在所述hfile未压缩的情况下,针对各hadoop文件中所包含的每个数据块:当该数据块是无校验数据块时,若该数据块的开头字段内容与预设字段内容相同,且,该数据块的compressedblocksize字段和uncompressedblocksize字段的值相等且均大于等于该数据块中的数据部分blockdata的大小,且,该数据块的preblockoffset值和前一个数据块记录的起始位置相等,则该数据块为满足第一预设条件的数据块;当该数据块是有校验数据块时,若该数据块的开头字段内容与预设字段内容相同,且,该数据块的compressedblocksize字段和uncompressedblocksize字段的值不相等且均大于等于该数据块中的数据部分blockdata的大小,且,该数据块的preblockoffset值和前一个数据块记录的起始位置相等,且,该数据块的checksumtype字段的值与预设值相等,且,该数据块的bytesperchecksum字段内的值与所述hbase数据库的配置文件中的指定参数hbase.hstore.bytes.per.checksum相同,且,数据块中的sizedataondisk字段的值的大于等于该该数据块中blockdata的大小,则该数据块为满足第一预设条件的数据块。
所述第一扫描模块702,具体用于,在所述hfile被压缩的情况下,针对各hadoop文件中所包含的每个数据块:当该数据块是无校验数据块时,若该数据块的开头字段内容与预设字段内容相同,且,该数据块的compressedblocksize字段和uncompressedblocksize字段的值不相等,且,uncompressedblocksize字段的值大于等于该数据块中的数据部分blockdata的大小,且,该数据块的preblockoffset值和前一个数据块记录的起始位置相等,则该数据块为满足第一预设条件的数据块;当该数据块是有校验数据块时,若该数据块的开头字段内容与预设字段内容相同,且,该数据块的compressedblocksize字段和uncompressedblocksize字段的值不相等,且,uncompressedblocksize字段的值大于等于该数据块中的数据部分blockdata的大小,且,该数据块的preblockoffset值和前一个数据块记录的起始位置相等,且,该数据块的checksumtype字段的值与预设值相等,且,该数据块的bytesperchecksum字段内的值与所述hbase数据库的配置文件中的指定参数hbase.hstore.bytes.per.checksum相同,且,数据块中的sizedataondisk字段的值的大于等于该数据块中blockdata的大小,则该数据块为满足第一预设条件的数据块。
所述第二扫描模块703,具体用于,针对一个待定键值对,若该待定键值对的keylength字段的值大于0并且小于等于所述key length字段所能表示的最大数值,且,该待定键值对的value length字段的值大于0并且小于等于所述value length字段所能表示的最大数值,且,该待定键值对的row length字段的值在预定的范围内,且,该待定键值对的row字段所包含的key的结构信息与预设结构信息相同,且,该待定键值对的column familylength字段的值与该待定键值对被创建时所确定的指定字段的长度值相同,且,该待定键值对的column family字段的内容与第一预设内容相同,且,该待定键值对的columnqualifier字段的内容与第二预设内容相同,且,该待定键值对的timestamp字段所表示的时间不在所述hbase数据库的建立时间之前并且小于当前时间,且,该待定键值对的keytype字段的内容与第三预设内容相同,则该待定键值对为满足第二预设条件的键值对。
所述存储模块704,具体用于,针对满足第二预设条件的每个键值对,提取该键值对内包含的各个字段,由提取的各字段重新构建键值对,将重新构建的键值对保存为恢复出的数据文件,并将数据文件存放在其他hbase数据库中。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本发明的实施例可提供为方法、系统或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上所述仅为本发明的实施例而已,并不用于限制本发明。对于本领域技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。
Claims (12)
1.一种数据恢复方法,其特征在于,包括:
确定数据文件中包含的各子文件;
扫描各子文件中的数据块,确定出各子文件中具有完整数据块结构的数据块;
在确定出的各数据块中,扫描满足第二预设条件的键值对;
保存扫描出的键值对,作为恢复出的数据文件;
所述数据文件为hbase数据库中的逻辑文件hfile;
所述保存扫描出的键值对,作为恢复出的数据文件,具体包括:
针对满足第二预设条件的每个键值对,提取该键值对内包含的各个字段,由提取的各字段重新构建键值对,将重新构建的键值对保存为恢复出的数据文件,并将数据文件存放在其他hbase数据库中。
2.如权利要求1所述的方法,其特征在于,所述子文件为hfile对应的hadoop文件;
确定数据文件中包含的各子文件,具体包括:
确定hbase数据库中hfile对应的各hadoop文件。
3.如权利要求2所述的方法,其特征在于,扫描各子文件中的数据块,具体包括:
针对每个子文件,根据该子文件中包含的各数据块的排序,依次扫描该子文件中的各数据块;
其中,在扫描一个数据块时,是按照从该数据块中的第一字节到最后一个字节依次扫描的。
4.如权利要求2所述的方法,其特征在于,在所述hfile未压缩的情况下,针对各hadoop文件中所包含的每个数据块:
当该数据块是无校验数据块时,若该数据块的开头字段内容与预设字段内容相同,且,该数据块的compressedblocksize字段和uncompressedblocksize字段的值相等且均大于等于该数据块中的数据部分blockdata的大小,且,该数据块的preblockoffset值和前一个数据块记录的起始位置相等,则该数据块为满足第一预设条件的数据块;
当该数据块是有校验数据块时,若该数据块的开头字段内容与预设字段内容相同,且,该数据块的compressedblocksize字段和uncompressedblocksize字段的值不等且均大于等于该数据块中的数据部分blockdata的大小,且,该数据块的preblockoffset值和前一个数据块记录的起始位置相等,且,该数据块的checksumtype字段的值与预设值相等,且,该数据块的bytesperchecksum字段内的值与所述hbase数据库的配置文件中的指定参数hbase.hstore.bytes.per.checksum相同,且,数据块中的sizedataondisk字段的值的大于等于该数据块中blockdata的大小,则该数据块为满足第一预设条件的数据块。
5.如权利要求2所述的方法,其特征在于,在所述hfile被压缩的情况下,针对各hadoop文件中所包含的每个数据块:
当该数据块是无校验数据块时,若该数据块的开头字段内容与预设字段内容相同,且,该数据块的compressedblocksize字段和uncompressedblocksize字段的值不相等,且,uncompressedblocksize字段的值大于等于该数据块中的数据部分blockdata的大小,且,该数据块的preblockoffset值和前一个数据块记录的起始位置相等,则该数据块为满足第一预设条件的数据块;
当该数据块是有校验数据块时,若该数据块的开头字段内容与预设字段内容相同,且,该数据块的compressedblocksize字段和uncompressedblocksize字段的值不相等,且,uncompressedblocksize字段的值大于等于该数据块中的数据部分blockdata的大小,且,该数据块的preblockoffset值和前一个数据块记录的起始位置相等,且,该数据块的checksumtype字段的值与预设值相等,且,该数据块的bytesperchecksum字段内的值与所述hbase数据库的配置文件中的指定参数hbase.hstore.bytes.per.checksum相同,且,数据块中的sizedataondisk字段的值的大于等于该数据块中blockdata的大小,则该数据块为满足第一预设条件的数据块。
6.如权利要求2所述的方法,其特征在于,针对一个待定键值对,若该待定键值对的keylength字段的值大于0并且小于等于所述key length字段所能表示的最大数值,且,该待定键值对的value length字段的值大于0并且小于等于所述value length字段所能表示的最大数值,且,该待定键值对的rowlength字段的值在预定的范围内,且,该待定键值对的row字段所包含的key的结构信息与预设结构信息相同,且,该待定键值对的column familylength字段的值与该待定键值对被创建时所确定的指定字段的长度值相同,且,该待定键值对的column family字段的内容与第一预设内容相同,且,该待定键值对的columnqualifier字段的内容与第二预设内容相同,且,该待定键值对的timestamp字段所表示的时间不在所述hbase数据库的建立时间之前并且小于当前时间,且,该待定键值对的keytype字段的内容与第三预设内容相同,则该待定键值对为满足第二预设条件的键值对。
7.一种数据恢复装置,其特征在于,包括:
确定模块,用于确定数据文件中包含的各子文件;
第一扫描模块,用于扫描各子文件中的数据块,确定出各子文件中具有完整数据块结构的数据块;
第二扫描模块,用于在确定出的各数据块中,扫描满足第二预设条件的键值对;
存储模块,用于保存扫描出的键值对,作为恢复出的数据文件;
所述数据文件为hbase数据库中的逻辑文件hfile;
所述存储模块具体用于,针对满足第二预设条件的每个键值对,提取该键值对内包含的各个字段,由提取的各字段重新构建键值对,将重新构建的键值对保存为恢复出的数据文件,并将数据文件存放在其他hbase数据库中。
8.如权利要求7所述的装置,其特征在于,所述子文件为hfile对应的hadoop文件,所述确定模块具体用于,确定hbase数据库中hfile对应的各hadoop文件。
9.如权利要求8所述的装置,其特征在于,所述第一扫描模块具体用于针对每个子文件,根据该子文件中包含的各数据块的排序,依次扫描该子文件中的各数据块;
其中,在扫描一个数据块时,是按照从该数据块中的第一字节到最后一个字节依次扫描的。
10.如权利要求8所述的装置,其特征在于,所述第一扫描模块具体用于,在所述hfile未压缩的情况下,针对各hadoop文件中所包含的每个数据块:当该数据块是无校验数据块时,若该数据块的开头字段内容与预设字段内容相同,且,该数据块的compressedblocksize字段和uncompressedblocksize字段的值相等且均大于等于该数据块中的数据部分blockdata的大小,且,该数据块的preblockoffset值和前一个数据块记录的起始位置相等,则该数据块为满足第一预设条件的数据块;当该数据块是有校验数据块时,若该数据块的开头字段内容与预设字段内容相同,且,该数据块的compressedblocksize字段和uncompressedblocksize字段的值不等且均大于等于该数据块中的数据部分blockdata的大小,且,该数据块的preblockoffset值和前一个数据块记录的起始位置相等,且,该数据块的checksumtype字段的值与预设值相等,且,该数据块的bytesperchecksum字段内的值与所述hbase数据库的配置文件中的指定参数hbase.hstore.bytes.per.checksum相同,且,数据块中的sizedataondisk字段的值的大于等于该该数据块中blockdata的大小,则该数据块为满足第一预设条件的数据块。
11.如权利要求8所述的装置,其特征在于,所述第一扫描模块具体用于,在所述hfile被压缩的情况下,针对各hadoop文件中所包含的每个数据块:当该数据块是无校验数据块时,若该数据块的开头字段内容与预设字段内容相同,且,该数据块的compressedblocksize字段和uncompressedblocksize字段的值不相等,且,uncompressedblocksize字段的值大于等于该数据块中的数据部分blockdata的大小,且,该数据块的preblockoffset值和前一个数据块记录的起始位置相等,则该数据块为满足第一预设条件的数据块;当该数据块是有校验数据块时,若该数据块的开头字段内容与预设字段内容相同,且,该数据块的compressedblocksize字段和uncompressedblocksize字段的值不相等,且,uncompressedblocksize字段的值大于等于该数据块中的数据部分blockdata的大小,且,该数据块的preblockoffset值和前一个数据块记录的起始位置相等,且,该数据块的checksumtype字段的值与预设值相等,且,该数据块的bytesperchecksum字段内的值与所述hbase数据库的配置文件中的指定参数hbase.hstore.bytes.per.checksum相同,且,数据块中的sizedataondisk字段的值的大于等于该数据块中blockdata的大小,则该数据块为满足第一预设条件的数据块。
12.如权利要求8所述的装置,其特征在于,所述第二扫描模块具体用于,针对一个待定键值对,若该待定键值对的key length字段的值大于0并且小于等于所述key length字段所能表示的最大数值,且,该待定键值对的value length字段的值大于0并且小于等于所述value length字段所能表示的最大数值,且,该待定键值对的row length字段的值在预定的范围内,且,该待定键值对的row字段所包含的key的结构信息与预设结构信息相同,且,该待定键值对的column family length字段的值与该待定键值对被创建时所确定的指定字段的长度值相同,且,该待定键值对的column family字段的内容与第一预设内容相同,且,该待定键值对的column qualifier字段的内容与第二预设内容相同,且,该待定键值对的timestamp字段所表示的时间不在所述hbase数据库的建立时间之前并且小于当前时间,且,该待定键值对的keytype字段的内容与第三预设内容相同,则该待定键值对为满足第二预设条件的键值对。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510142725.9A CN104778097B (zh) | 2015-03-27 | 2015-03-27 | 一种数据恢复方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510142725.9A CN104778097B (zh) | 2015-03-27 | 2015-03-27 | 一种数据恢复方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104778097A CN104778097A (zh) | 2015-07-15 |
CN104778097B true CN104778097B (zh) | 2019-01-01 |
Family
ID=53619578
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510142725.9A Active CN104778097B (zh) | 2015-03-27 | 2015-03-27 | 一种数据恢复方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104778097B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109542665A (zh) * | 2017-09-21 | 2019-03-29 | 阿里巴巴集团控股有限公司 | 掉电恢复方法、数据写入方法及装置 |
CN110750388B (zh) * | 2019-10-30 | 2022-06-17 | 苏州龙信信息科技有限公司 | 一种备份解析方法、装置、设备和介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101242362A (zh) * | 2008-03-07 | 2008-08-13 | 华为技术有限公司 | 查找键值生成装置及方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100388612B1 (ko) * | 2001-07-25 | 2003-06-25 | 엘지전자 주식회사 | 교환 시스템에서의 패키징 압축 방법 |
CN1352427A (zh) * | 2001-11-26 | 2002-06-05 | 北京实达铭泰计算机应用技术开发有限公司 | 一种计算机系统恢复方法 |
CN101308471B (zh) * | 2008-05-30 | 2011-12-21 | 华为技术有限公司 | 一种恢复数据的方法及装置 |
CN104008134B (zh) * | 2014-05-06 | 2017-02-15 | 武汉邮电科学研究院 | 基于HBase的高效存储方法及系统 |
CN104199963A (zh) * | 2014-09-19 | 2014-12-10 | 浪潮(北京)电子信息产业有限公司 | HBase数据备份恢复的方法和装置 |
-
2015
- 2015-03-27 CN CN201510142725.9A patent/CN104778097B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101242362A (zh) * | 2008-03-07 | 2008-08-13 | 华为技术有限公司 | 查找键值生成装置及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104778097A (zh) | 2015-07-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107807982B (zh) | 一种异构数据库的一致性校验方法及装置 | |
CN110008743B (zh) | 一种块链式账本中的数据属性标识方法、装置及设备 | |
CN107315668A (zh) | 分布式存储系统数据一致性自动化快速检测方法及装置 | |
CN110442473B (zh) | 一种非易失性数据存储方法、装置、电子设备及介质 | |
CN106897342B (zh) | 一种数据校验方法和设备 | |
CN110008129B (zh) | 一种存储定时快照的可靠性测试方法、装置及设备 | |
CN106776795B (zh) | 基于Hbase数据库的数据写入方法及装置 | |
CN110716965B (zh) | 一种块链式账本中的查询方法、装置及设备 | |
CN108573172B (zh) | 一种数据校验、存储方法及装置 | |
CN106445815A (zh) | 一种自动化测试方法及装置 | |
CN104714957A (zh) | 一种表结构的变更方法及装置 | |
CN103761095B (zh) | 一种生成通用的升级文件头部数据信息的方法 | |
CN104778097B (zh) | 一种数据恢复方法及装置 | |
CN113377401A (zh) | 一种嵌入式设备版本文件打包的方法及打包工具 | |
CN105045676A (zh) | 基于SQLite数据库的丢失数据的恢复装置和方法 | |
CN110059088B (zh) | 一种块链式账本中的数据属性标识方法、装置及设备 | |
CN113220568B (zh) | Usim卡文件系统的测试方法、装置及介质 | |
JPWO2015087509A1 (ja) | 状態保存復元装置、状態保存復元方法、および、プログラム | |
CN106569986B (zh) | 字符串替换方法和装置 | |
CN107315806B (zh) | 一种基于文件系统的嵌入式存储方法和装置 | |
CN111444194B (zh) | 一种块链式账本中索引的清除方法、装置及设备 | |
CN112650645B (zh) | 堆内存使用情况监测方法、装置和5g基站设备 | |
CN110196793B (zh) | 针对插件数据库的日志分析方法及设备 | |
CN114764335A (zh) | 一种生成镜像的方法、装置、终端及存储介质 | |
CN112307022A (zh) | 一种元数据修复方法及相关装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230306 Address after: Room 501-502, 5/F, Sina Headquarters Scientific Research Building, Block N-1 and N-2, Zhongguancun Software Park, Dongbei Wangxi Road, Haidian District, Beijing, 100193 Patentee after: Sina Technology (China) Co.,Ltd. Address before: 100080, International Building, No. 58 West Fourth Ring Road, Haidian District, Beijing, 20 floor Patentee before: Sina.com Technology (China) Co.,Ltd. |