CN104077423A - 一种基于一致性散列的结构化数据存储、查询和迁移方法 - Google Patents
一种基于一致性散列的结构化数据存储、查询和迁移方法 Download PDFInfo
- Publication number
- CN104077423A CN104077423A CN201410353123.3A CN201410353123A CN104077423A CN 104077423 A CN104077423 A CN 104077423A CN 201410353123 A CN201410353123 A CN 201410353123A CN 104077423 A CN104077423 A CN 104077423A
- Authority
- CN
- China
- Prior art keywords
- node
- hash
- data block
- data
- hash value
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/214—Database migration support
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于一致性散列的结构化数据存储、查询和迁移方法,步骤如下:建立基于一致性散列的HDFS数据存储模型,基于此模型进行数据存储和数据查询,当有数据节点加入或失效时,实施数据迁移;所述数据存储方法是将待写入文件的各数据块进行一致性散列得到数据块Hash值,然后根据数据块Hash值,在节点Hash链中查找该数据块的存储节点并将数据块内容存入其存储节点。本发明基于HDFS集群主从结构,应用一致性散列,使结构化数据均匀分散在HDFS集群的各个数据节点上,有效地提高并行遍历数据的效率,当数据节点数量发生变化时,可大大减少数据迁移所涉及的节点数量和总迁移数据量,提高数据存储系统的运行性能。
Description
技术领域
本发明涉及计算机应用技术领域,尤其涉及一种基于一致性散列的结构化数据存储、查询和迁移方法。
背景技术
对于海量结构化数据的存储与管理,以Hadoop分布式文件系统(Hadoop Distributed FileSystem,HDFS)作为底层存储的关系型数据库是目前主要的解决方案。HDFS的基本思想是将一个文件分成若干个固定大小的数据块进行存储,其架构采用主/从结构体系,一个HDFS集群包含一个名字节点(Namenode)和若干个数据节点(Datanode)。其中名字节点为主节点,负责控制外部客户机的访问以及存储整个系统的元数据,元数据包括命名空间、文件到数据块的映射、系统配置信息等;而数据节点则是从属节点,用来存储实际文件数据,即HDFS数据块。为提高数据的可靠性和可用性,每个数据块都默认保存三份冗余,每个备份副本存储于不同的数据节点上。对外部应用而言,HDFS如同传统的分布式文件系统,可以对文件进行创建、删除、移动等操作。
然而,上述解决方案存在的问题是:
1.存储不均衡,严重影响并行遍历效率
HDFS在对表数据进行存储时,是根据集群中各数据节点的负载情况来选择数据块的存储节点的,负载较少的数据节点被优先选择用来存储,这种存储策略不考虑所存储数据块之间的关联,当数据流量很大时,由于大部分数据块会存储到负载较少的节点上,因而使隶属于同一个表的数据块分布不均衡,因而严重降低了遍历数据的并行效率,造成较大的数据库查询延迟。
2.数据迁移涉及所有节点,严重影响系统的运行性能
在部署HDFS的集群中,数据节点的加入和失效是常态。为保证集群中各个数据节点的负载均衡,当数据节点数量变化时需要进行数据迁移。如:当部署HDFS的集群中有新的数据节点加入时,其他所有的节点都要将部分数据迁移到新节点;而当有节点失效时,系统会将失效节点在冗余节点上的备份均匀地迁移到其他节点上。无论是节点加入还是节点失效,数据迁移均涉及HDFS系统中所有的数据节点,造成大量的迁移负载,致使网络拥塞,极大地影响了HDFS系统的运行性能。
一致性散列算法具有以下三个特点:1.平衡性,即:将关键字进行一致性散列后,可以根据散列值将其均匀地分布在地址空间中。2.单调性,指当地址空间增大或减小时,通过一致性散列得到的散列值能够映射到新的地址空间,而不是原来的地址空间。3.分散性,是指当用户通过散列过程将关键字映射到地址空间时,一致性散列算法会避免因可见范围不同而出现的映射结果不一致的情况。一致性散列目前主要用于P2P环境和分布式缓存等技术,本发明将一致性散列思想用于HDFS结构化数据存储领域,并对现有一致性散列的对等结构进行改进,使其应用于HDFS的主从结构体系。
发明内容
本发明的目的是为了解决HDFS系统所存在的上述两个问题,提供一种基于一致性散列的结构化数据存储、查询和迁移方法,它的优点是:(1)利用一致性散列对数据块进行存储,使文件所对应的数据块均匀分散在集群中的各个节点上,因而有效地提高了并行遍历数据的效率。(2)当数据节点数量发生变化时,如:节点增加或失效,只需要在新增节点或失效节点的相邻节点发生数据迁移,因而大大减少数据迁移所涉及的节点数量和总迁移数据量,提高了HDFS系统的运行效率。
本发明所采用的技术方案如下:
定义1数据块Hash值:对HDFS系统中数据块B,以其数据块标号为关键字进行一致性散列,所得散列值H_b(B)称为数据块B的Hash值。
定义2节点Hash值:对HDFS系统中数据节点D,以其物理地址为关键字进行一致性散列,所得散列值H_d(D)称为数据节点D的Hash值。
定义3节点Hash链:设<H_d1,H_d2,…,H_dn>为HDFS系统中各数据节点的Hash值按照自小到大的顺序进行排序所得序列,其中:H_dk<H_dk+1,(1≤k<n),记DN(H_dk)表示H_dk所对应的数据节点,则线性结构[DN(H_d1),DN(H_d2),…,DN(H_dn)]称为该HDFS系统的节点Hash链,其中,DN(H_dk+1)称为DN(H_dk)的后继节点,同时定义DN(H_dn)的后继节点为DN(H_d1).
基于一致性散列的结构化数据存储方法,包括如下步骤:
步骤(1):建立数据存储模型:首先对部署HDFS的集群中所有数据节点,以数据节点的物理地址为关键字进行一致性散列,得到节点Hash值;然后根据所述节点Hash值由小到大对数据节点进行排序,形成节点Hash链,将节点Hash链中所有数据节点的物理地址与Hash值的映射记录以顺序表形式存储到HDFS集群的名字节点上,所述映射记录顺序表又称Hash链元数据表,当HDFS启动时,所述Hash链元数据表将自动加载到名字节点的内存中;
步骤(2):数据存储:将待写入文件的每个数据块按照数据块标号,采用与所述步骤(1)数据节点散列相同的哈希函数进行一致性散列,得到数据块Hash值,对于每一个数据块,首先根据其数据块Hash值,从Hash链元数据表中查找首个节点Hash值大于或等于该数据块Hash值的数据节点,所查找的数据节点即为该数据块所对应的存储节点,然后将当前数据块内容存储到所对应的存储节点上,最后将数据块及其存储节点的信息写入名字节点;
基于一致性散列的结构化数据存储、查询方法,包括如下步骤:
步骤(1):建立数据存储模型:首先对部署HDFS的集群中所有数据节点,以数据节点的物理地址为关键字进行一致性散列,得到节点Hash值;然后根据所述节点Hash值由小到大对数据节点进行排序,形成节点Hash链,将节点Hash链中所有数据节点的物理地址与Hash值的映射记录以顺序表形式存储到HDFS集群的名字节点上,所述映射记录顺序表又称Hash链元数据表,当HDFS启动时,所述Hash链元数据表将自动加载到名字节点的内存中;
步骤(2):数据存储:将待写入文件的每个数据块按照数据块标号,采用与所述步骤(1)数据节点散列相同的哈希函数进行一致性散列,得到数据块Hash值;对于每一个数据块,首先根据其数据块Hash值,从Hash链元数据表中查找首个节点Hash值大于或等于该数据块Hash值的数据节点,所查找的数据节点即为该数据块所对应的存储节点,然后将当前数据块内容存储到所对应的存储节点上,最后将数据块及其存储节点的信息写入名字节点;
步骤(3a):数据查询:首先从名字节点中查找待查询文件所对应的数据块,并计算这些数据块的Hash值,然后分别根据所得数据块Hash值,按照步骤(2)所述的查找方法,在Hash链元数据表中查找各数据块所对应的存储节点,在存储节点上进行数据块的读取。
基于一致性散列的结构化数据存储、迁移方法,包括如下步骤:
步骤(1):建立数据存储模型:首先对部署HDFS的集群中所有数据节点,以数据节点的物理地址为关键字进行一致性散列,得到节点Hash值;然后根据所述节点Hash值由小到大对数据节点进行排序,形成节点Hash链,将节点Hash链中所有数据节点的物理地址与Hash值的映射记录以顺序表形式存储到HDFS集群的名字节点上,所述映射记录顺序表又称Hash链元数据表,当HDFS启动时,所述Hash链元数据表将自动加载到名字节点的内存中;
步骤(2):数据存储:将待写入文件的每个数据块按照数据块标号,采用与所述步骤(1)数据节点散列相同的哈希函数进行一致性散列,得到数据块Hash值;对于每一个数据块,首先根据其数据块Hash值,从Hash链元数据表中查找首个节点Hash值大于或等于该数据块Hash值的数据节点,所查找的数据节点即为该数据块所对应的存储节点,然后将当前数据块内容存储到所对应的存储节点上,最后将数据块及其存储节点的信息写入名字节点;
步骤(3b):数据迁移,包括:
步骤(3b-1):当部署HDFS的集群中有新数据节点加入时,首先计算出新数据节点的Hash值,并依据所得Hash值,通过二分插入排序算法在Hash链元数据表中插入新数据节点的记录,然后将Hash链中新数据节点的后继节点上Hash值小于或等于新节点Hash值的数据块迁移到新节点上,最后在名字节点上对新数据节点及其后继节点的信息进行更新;
步骤(3b-2):当部署HDFS的集群中出现失效节点时,首先从名字节点中读取该失效节点的信息,计算该失效节点的Hash值,并通过二分查找算法在Hash链元数据表中找到失效节点的记录,然后将失效节点的数据块从其冗余节点上恢复到失效节点的首个非失效后继节点上,最后从Hash链元数据表中删除失效节点记录,从名字节点中删除失效节点信息,并更新恢复节点信息。
所述步骤(1)包括:
步骤(1-1):计算数据节点Hash值:选取一致性Hash函数,对部署HDFS系统的集群的各数据节点,将其物理地址以ASCII码字符串形式作为关键字进行一致性散列,得到各数据节点的Hash值;
步骤(1-2):构造节点Hash链:对于部署HDFS系统的集群,将集群中所有数据节点均按照步骤(1-1)所述方法计算节点Hash值,并根据所述节点Hash值由小到大对数据节点进行排序,形成节点Hash链;
步骤(1-3):存储Hash链元数据表:将节点Hash链中所有数据节点的物理地址和Hash值的映射记录,以顺序表形式存储于HDFS系统的名字节点上,形成Hash链元数据表,当HDFS启动时,所述Hash链元数据表将自动加载到名字节点的内存中。
所述步骤(2)包括:
将待写入文件所对应的每一个数据块,按照以下步骤进行数据存储,直至所有的数据块均被存储到HDFS系统的数据节点中:
步骤(2-1):计算数据块Hash值:选取与所述步骤(1-1)相同的一致性Hash函数,以当前数据块的块标号为关键字进行一致性散列,得到当前数据块的Hash值;所述数据块标号是指数据块的唯一性标识号;
步骤(2-2):查找数据块的存储节点:以当前数据块Hash值为查找关键字,通过二分查找算法,在Hash链元数据表中查找第一个节点Hash值大于或等于该数据块Hash值的数据节点,所得数据节点即为当前数据块所对应的存储节点;
步骤(2-3):存储数据块:将当前数据块内容存储到步骤(2-2)查找所得的存储节点上;
步骤(2-4):将数据块及其存储节点信息写入名字节点。
所述步骤(3a)包括:
当客户向HDFS系统提出读取文件请求时,按以下步骤完成查询:
步骤(3a-1):从名字节点中查找该文件所对应的数据块;
步骤(3a-2):对每一个数据块分别按照步骤(2-1)所述方法计算数据块Hash值;
步骤(3a-3):按照步骤(2-2)所述方法查找当前数据块所对应的存储节点;
步骤(3a-4):将当前数据块内容从其所对应的存储节点上读出。
所述步骤(3b-1)包括如下步骤:
步骤(3b-1-1):对新加入的数据节点在名字节点进行注册,加入HDFS集群中;
步骤(3b-1-2):按照步骤(1-1)所述方法计算新数据节点的Hash值;
步骤(3b-1-3):采用二分插入排序算法,在Hash链元数据表中插入新数据节点的物理地址与Hash值的映射记录;
步骤(3b-1-4):在Hash链中找到新数据节点的后继节点,将所述后继结点中数据块Hash值小于或等于新数据节点Hash值的数据块全部迁移到新数据节点上;
步骤(3b-1-5):在名字节点上对新数据节点及其后继节点的信息进行更新。
所述步骤(3b-2)包括如下步骤:
步骤(3b-2-1):从名字节点中读取失效节点的物理地址、失效节点上各数据块标号及其冗余节点位置;
步骤(3b-2-2):按照步骤(1-1)所述方法计算失效节点的Hash值;
步骤(3b-2-3):根据失效节点的Hash值,通过二分查找算法,在Hash链元数据表中找到该失效节点,记录其第一个未失效后继节点,作为该失效节点的恢复节点;
步骤(3b-2-4):对存储于失效数据节点上的所有数据块,将其存储在冗余节点的副本拷贝到步骤(3b-2-3)所述的恢复节点上;
步骤(3b-2-5):从Hash链元数据表中删除该失效节点的记录;
步骤(3b-2-6):从名字节点中删除失效节点信息,并更新恢复节点信息。
本发明的有益效果:
(1)本发明基于一致性散列对HDFS系统的数据块进行存储,每个数据块根据Hash值确定所对应的存储节点,由于一致性散列能够使文件所对应的数据块均匀分散在集群的各个数据节点上,因而大大提高了并行遍历数据的效率。
(2)当数据节点数量发生变化时,如:节点加入或失效,只需要在新添节点或失效节点的相邻节点发生数据迁移,大大减少了数据迁移所涉及的节点数量和总迁移数据量,从而有效地提高了HDFS系统的运行性能。
附图说明
图1是本发明的基于一致性散列的结构化数据存储主流程图;
图2是本发明的基于一致性散列的结构化数据存储、查询主流程图;
图3是本发明的基于一致性散列的结构化数据存储、迁移主流程图;
图4是数据节点Hash链结构示意图;
图5是节点Hash链元数据表示意图;
图6是数据节点Hash链构造过程示意图;
图7是HDFS数据块存储过程示意图;
图8是节点添加时数据迁移过程示意图;
图9是节点失效时数据迁移过程示意图。
具体实施方式
下面结合附图与实施例对本发明作进一步说明。
定义1数据块Hash值:对HDFS系统中数据块B,以其数据块标号为关键字进行一致性散列,所得散列值H_b(B)称为数据块B的Hash值。
定义2节点Hash值:对HDFS系统中数据节点D,以其物理地址为关键字进行一致性散列,所得散列值H_d(D)称为数据节点D的Hash值。
定义3节点Hash链:设<H_d1,H_d2,…,H_dn>为HDFS系统中各数据节点的Hash值按照自小到大的顺序进行排序所得序列,其中:H_dk<H_dk+1,(1≤k<n),记DN(H_dk)表示H_dk所对应的数据节点,则线性结构[DN(H_d1),DN(H_d2),…,DN(H_dn)]称为该HDFS系统的节点Hash链,其中,DN(H_dk+1)称为DN(H_dk)的后继节点,同时定义DN(H_dn)的后继节点为DN(H_d1).
如图1所示,基于一致性散列的结构化数据存储方法,包括如下步骤:
步骤(1):建立数据存储模型:首先对部署HDFS的集群中所有数据节点,以数据节点的物理地址为关键字进行一致性散列,得到节点Hash值;然后根据所述节点Hash值由小到大对数据节点进行排序,形成节点Hash链,将节点Hash链中所有数据节点的物理地址与Hash值的映射记录以顺序表形式存储到HDFS集群的名字节点上,所述映射记录顺序表又称Hash链元数据表,当HDFS启动时,所述Hash链元数据表将自动加载到名字节点的内存中;
步骤(2):数据存储:将待写入文件的每个数据块按照数据块标号,采用与所述步骤(1)数据节点散列相同的哈希函数进行一致性散列,得到数据块Hash值;对于每一个数据块,首先根据其数据块Hash值,从Hash链元数据表中查找首个节点Hash值大于或等于该数据块Hash值的数据节点,所查找的数据节点即为该数据块所对应的存储节点,然后将当前数据块内容存储到所对应的存储节点上,最后将数据块及其存储节点的信息写入名字节点;
如图2所示,基于一致性散列的结构化数据存储、查询方法,包括如下步骤:
步骤(1):建立数据存储模型:首先对部署HDFS的集群中所有数据节点,以数据节点的物理地址为关键字进行一致性散列,得到节点Hash值;然后根据所述节点Hash值由小到大对数据节点进行排序,形成节点Hash链,将节点Hash链中所有数据节点的物理地址与Hash值的映射记录以顺序表形式存储到HDFS集群的名字节点上,所述映射记录顺序表又称Hash链元数据表,当HDFS启动时,所述Hash链元数据表将自动加载到名字节点的内存中;
步骤(2):数据存储:将待写入文件的每个数据块按照数据块标号,采用与所述步骤(1)数据节点散列相同的哈希函数进行一致性散列,得到数据块Hash值;对于每一个数据块,首先根据其数据块Hash值,从Hash链元数据表中查找首个节点Hash值大于或等于该数据块Hash值的数据节点,所查找的数据节点即为该数据块所对应的存储节点,然后将当前数据块内容存储到所对应的存储节点上,最后将数据块及其存储节点的信息写入名字节点;
步骤(3a):数据查询:首先从名字节点中查找待查询文件所对应的数据块,并计算这些数据块的Hash值,然后分别根据所得数据块Hash值,按照步骤(2)所述的查找方法,在Hash链元数据表中查找各数据块所对应的存储节点,在存储节点上进行数据块的读取。
如图3所示,基于一致性散列的结构化数据存储、迁移方法,包括如下步骤:
步骤(1):建立数据存储模型:首先对部署HDFS的集群中所有数据节点,以数据节点的物理地址为关键字进行一致性散列,得到节点Hash值;然后根据所述节点Hash值由小到大对数据节点进行排序,形成节点Hash链,将节点Hash链中所有数据节点的物理地址与Hash值的映射记录以顺序表形式存储到HDFS集群的名字节点上,所述映射记录顺序表又称Hash链元数据表,当HDFS启动时,所述Hash链元数据表将自动加载到名字节点的内存中;
步骤(2):数据存储:将待写入文件的每个数据块按照数据块标号,采用与所述步骤(1)数据节点散列相同的哈希函数进行一致性散列,得到数据块Hash值;对于每一个数据块,首先根据其数据块Hash值,从Hash链元数据表中查找首个节点Hash值大于或等于该数据块Hash值的数据节点,所查找的数据节点即为该数据块所对应的存储节点,然后将当前数据块内容存储到所对应的存储节点上,最后将数据块及其存储节点的信息写入名字节点;
步骤(3b):数据迁移,包括:
步骤(3b-1):当部署HDFS的集群中有新数据节点加入时,首先计算出新数据节点的Hash值,并依据所得Hash值,通过二分插入排序算法在Hash链元数据表中插入新数据节点的记录,然后将Hash链中新数据节点的后继节点上Hash值小于或等于新节点Hash值的数据块迁移到新节点上,最后在名字节点上对新数据节点及其后继节点的信息进行更新;
步骤(3b-2):当部署HDFS的集群中出现失效节点时,首先从名字节点中读取该失效节点的信息,计算该失效节点的Hash值,并通过二分查找算法在Hash链元数据表中找到失效节点的记录,然后将失效节点的数据块从其冗余节点上恢复到失效节点的首个非失效后继节点上,最后从Hash链元数据表中删除失效节点记录,从名字节点中删除失效节点信息,并更新恢复节点信息。
所述步骤(1)包括:
步骤(1-1):计算数据节点Hash值:选取一致性Hash函数,对部署HDFS系统的集群的各数据节点,将其物理地址以ASCII码字符串形式作为关键字进行一致性散列,得到各数据节点的Hash值;
步骤(1-2):构造节点Hash链:对于部署HDFS系统的集群,将集群中所有数据节点均按照步骤(1-1)所述方法计算节点Hash值,并根据所述节点Hash值由小到大对数据节点进行排序,形成节点Hash链;
步骤(1-3):存储Hash链元数据表:将节点Hash链中所有数据节点的物理地址和Hash值的映射记录,以顺序表形式存储于HDFS系统的名字节点上,形成Hash链元数据表,当HDFS启动时,所述Hash链元数据表将自动加载到名字节点的内存中。
所述步骤(2)包括:
将待写入文件所对应的每一个数据块,按照以下步骤进行数据存储,直至所有的数据块均被存储到HDFS系统的数据节点中:
步骤(2-1):计算数据块Hash值:选取与所述步骤(1-1)相同的一致性Hash函数,以当前数据块的块标号为关键字进行一致性散列,得到当前数据块的Hash值;所述数据块标号是指数据块的唯一性标识号;
步骤(2-2):查找数据块的存储节点:以当前数据块Hash值为查找关键字,通过二分查找算法,在Hash链元数据表中查找第一个节点Hash值大于或等于该数据块Hash值的数据节点,所得数据节点即为当前数据块所对应的存储节点;
步骤(2-3):存储数据块:将当前数据块内容存储到步骤(2-2)查找所得的存储节点上;
步骤(2-4):将数据块及其存储节点信息写入名字节点。
所述步骤(3a)包括:
当客户向HDFS系统提出读取文件请求时,按以下步骤完成查询:
步骤(3a-1):从名字节点中查找该文件所对应的数据块;
步骤(3a-2):对每一个数据块分别按照步骤(2-1)所述方法计算数据块Hash值;
步骤(3a-3):按照步骤(2-2)所述方法查找当前数据块所对应的存储节点;
步骤(3a-4):将当前数据块内容从其所对应的存储节点上读出。
所述步骤(3b-1)包括如下步骤:
步骤(3b-1-1):对新加入的数据节点在名字节点进行注册,加入HDFS集群中;
步骤(3b-1-2):按照步骤(1-1)所述方法计算新数据节点的Hash值;
步骤(3b-1-3):采用二分插入排序算法,在Hash链元数据表中插入新数据节点的物理地址与Hash值的映射记录;
步骤(3b-1-4):在Hash链中找到新数据节点的后继节点,将所述后继结点中数据块Hash值小于或等于新数据节点Hash值的数据块全部迁移到新数据节点上;
步骤(3b-1-5):在名字节点上对新数据节点及其后继节点的信息进行更新。
所述步骤(3b-2)包括如下步骤:
步骤(3b-2-1):从名字节点中读取失效节点的物理地址、失效节点上各数据块标号及其冗余节点位置;
步骤(3b-2-2):按照步骤(1-1)所述方法计算失效节点的Hash值;
步骤(3b-2-3):根据失效节点的Hash值,通过二分查找算法,在Hash链元数据表中找到该失效节点,记录其第一个未失效后继节点,作为该失效节点的恢复节点;
步骤(3b-2-4):对存储于失效数据节点上的所有数据块,将其存储在冗余节点的副本拷贝到步骤(3b-2-3)所述的恢复节点上;
步骤(3b-2-5):从Hash链元数据表中删除该失效节点的记录;
步骤(3b-2-6):从名字节点中删除失效节点信息,并更新恢复节点信息。
如图4所示,数据节点Hash链结构,以五个数据节点A~E为例,图中数据节点旁边方框中字符表示该数据节点的Hash值,方框下方字符表示该数据节点的物理地址,箭头表示后继关系。
如图5所示,节点Hash链元数据表,图中HA(Nodej)表示数据节点Nodej的物理地址,Hash(Nodej)表示数据节点Nodej的Hash值,其中,1≤j≤n,n为数据节点数量;且对于节点Nodek(1≤k<n),Hash(Nodek)<Hash(Nodek+1).
如图6所示,数据节点Hash链构造过程,包括如下步骤:
步骤(101):读取各数据节点的物理地址;
步骤(102):计算各数据节点Hash值;
步骤(103):将数据节点按其Hash值从小到大的顺序排序;
步骤(104):将数据节点的物理地址与其节点Hash值的映射记录依次写入Hash链元数据表。
如图7所示,HDFS数据块存储过程,包括如下步骤:
步骤(201):判断所有数据块是否已经存储,如果是就结束;如果否就进入步骤(202);
步骤(202):读取一个未存储的数据块;
步骤(203):计算当前数据块Hash值;
步骤(204):利用二分查找算法在节点Hash链中查找当前数据块所对应的存储节点;
步骤(205):将数据块写入此存储节点;
步骤(206):将数据块及其所对应的存储节点信息写入名字节点。
如图8所示,节点添加时数据迁移的步骤如下:
步骤(301):对新加入的节点在名字节点进行注册;
步骤(302):计算新加入数据节点的Hash值;
步骤(303):二分遍历节点Hash链元数据,找到新节点在Hash链中的插入位置;
步骤(304):将新节点的物理地址与Hash值的映射记录插入Hash链元数据表中;
步骤(305):将新节点的后继节点中数据块Hash值小于或等于新节点Hash值的数据块全部迁移到新节点上;
步骤(306):在名字节点上对新数据节点及其后继节点的信息进行更新。
如图9所示,节点失效时数据迁移的步骤如下:
步骤(401):从名字节点中读取失效节点信息;
步骤(402):计算失效节点的Hash值;
步骤(403):二分查找节点Hash链,确定失效节点在节点Hash链的位置;
步骤(404):记录该失效节点的第一个未失效后继节点信息;
步骤(405):将失效节点的数据块内容从其冗余节点恢复到失效节点的第一个未失效后继节点上;
步骤(406):从节点Hash链元数据表中删除失效节点记录;
步骤(407):从名字节点中删除失效节点信息,并更新恢复节点信息。
上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。
Claims (8)
1.基于一致性散列的结构化数据存储方法,其特征是,包括如下步骤:
步骤(1):建立数据存储模型:首先对部署HDFS的集群中所有数据节点,以数据节点的物理地址为关键字进行一致性散列,得到节点Hash值;然后根据所述节点Hash值由小到大对数据节点进行排序,形成节点Hash链,将节点Hash链中所有数据节点的物理地址与Hash值的映射记录以顺序表形式存储到HDFS集群的名字节点上,所述映射记录顺序表又称Hash链元数据表,当HDFS启动时,所述Hash链元数据表将自动加载到名字节点的内存中;
步骤(2):数据存储:将待写入文件的每个数据块按照数据块标号,采用与所述步骤(1)数据节点散列相同的哈希函数进行一致性散列,得到数据块Hash值;对于每一个数据块,首先根据其数据块Hash值,从Hash链元数据表中查找首个节点Hash值大于或等于该数据块Hash值的数据节点,所查找的数据节点即为该数据块所对应的存储节点,然后将当前数据块内容存储到所对应的存储节点上,最后将数据块及其存储节点的信息写入名字节点。
2.基于一致性散列的结构化数据存储、查询方法,其特征是,包括如下步骤:
步骤(1):建立数据存储模型:首先对部署HDFS的集群中所有数据节点,以数据节点的物理地址为关键字进行一致性散列,得到节点Hash值;然后根据所述节点Hash值由小到大对数据节点进行排序,形成节点Hash链,将节点Hash链中所有数据节点的物理地址与Hash值的映射记录以顺序表形式存储到HDFS集群的名字节点上,所述映射记录顺序表又称Hash链元数据表,当HDFS启动时,所述Hash链元数据表将自动加载到名字节点的内存中;
步骤(2):数据存储:将待写入文件的每个数据块按照数据块标号,采用与所述步骤(1)数据节点散列相同的哈希函数进行一致性散列,得到数据块Hash值;对于每一个数据块,首先根据其数据块Hash值,从Hash链元数据表中查找首个节点Hash值大于或等于该数据块Hash值的数据节点,所查找的数据节点即为该数据块所对应的存储节点,然后将当前数据块内容存储到所对应的存储节点上,最后将数据块及其存储节点的信息写入名字节点;
步骤(3a):数据查询:首先从名字节点中查找待查询文件所对应的数据块,并计算这些数据块的Hash值,然后分别根据所得数据块Hash值,按照步骤(2)所述的查找方法,在Hash链元数据表中查找各数据块所对应的存储节点,在存储节点上进行数据块的读取。
3.基于一致性散列的结构化数据存储、迁移方法,其特征是,包括如下步骤:
步骤(1):建立数据存储模型:首先对部署HDFS的集群中所有数据节点,以数据节点的物理地址为关键字进行一致性散列,得到节点Hash值;然后根据所述节点Hash值由小到大对数据节点进行排序,形成节点Hash链,将节点Hash链中所有数据节点的物理地址与Hash值的映射记录以顺序表形式存储到HDFS集群的名字节点上,所述映射记录顺序表又称Hash链元数据表,当HDFS启动时,所述Hash链元数据表将自动加载到名字节点的内存中;
步骤(2):数据存储:将待写入文件的每个数据块按照数据块标号,采用与所述步骤(1)数据节点散列相同的哈希函数进行一致性散列,得到数据块Hash值;对于每一个数据块,首先根据其数据块Hash值,从Hash链元数据表中查找首个节点Hash值大于或等于该数据块Hash值的数据节点,所查找的数据节点即为该数据块所对应的存储节点,然后将当前数据块内容存储到所对应的存储节点上,最后将数据块及其存储节点的信息写入名字节点;
步骤(3b):数据迁移,包括:
步骤(3b-1):当部署HDFS的集群中有新数据节点加入时,首先计算出新数据节点的Hash值,并依据所得Hash值,通过二分插入排序算法在Hash链元数据表中插入新数据节点的记录,然后将Hash链中新数据节点的后继节点上Hash值小于或等于新节点Hash值的数据块迁移到新节点上,最后在名字节点上对新数据节点及其后继节点的信息进行更新;
步骤(3b-2):当部署HDFS的集群中出现失效节点时,首先从名字节点中读取该失效节点的信息,计算该失效节点的Hash值,并通过二分查找算法在Hash链元数据表中找到失效节点的记录,然后将失效节点的数据块从其冗余节点上恢复到失效节点的首个非失效后继节点上,最后从Hash链元数据表中删除失效节点记录,从名字节点中删除失效节点信息,并更新恢复节点信息。
4.如权利要求1或2或3所述的方法,其特征是,所述步骤(1)包括:
步骤(1-1):计算数据节点Hash值:选取一致性Hash函数,对部署HDFS系统的集群的各数据节点,将其物理地址以ASCII码字符串形式作为关键字进行一致性散列,得到各数据节点的Hash值;
步骤(1-2):构造节点Hash链:对于部署HDFS系统的集群,将集群中所有数据节点均按照步骤(1-1)所述方法计算节点Hash值,并根据所述节点Hash值由小到大对数据节点进行排序,形成节点Hash链;
步骤(1-3):存储Hash链元数据表:将节点Hash链中所有数据节点的物理地址和Hash值的映射记录,以顺序表形式存储于HDFS系统的名字节点上,形成Hash链元数据表,当HDFS启动时,所述Hash链元数据表将自动加载到名字节点的内存中。
5.如权利要求1或2或3所述的方法,其特征是,所述步骤(2)包括:
将待写入文件所对应的每一个数据块,按照以下步骤进行数据存储,直至所有的数据块均被存储到HDFS系统的数据节点中:
步骤(2-1):计算数据块Hash值:选取与所述步骤(1-1)相同的一致性Hash函数,以当前数据块的块标号为关键字进行一致性散列,得到当前数据块的Hash值;所述数据块标号是指数据块的唯一性标识号;
步骤(2-2):查找数据块的存储节点:以当前数据块Hash值为查找关键字,通过二分查找算法,在Hash链元数据表中查找第一个节点Hash值大于或等于该数据块Hash值的数据节点,所得数据节点即为当前数据块所对应的存储节点;
步骤(2-3):存储数据块:将当前数据块内容存储到步骤(2-2)查找所得的存储节点上;
步骤(2-4):将数据块及其存储节点信息写入名字节点。
6.如权利要求2所述的方法,其特征是,所述步骤(3a)包括:
当客户向HDFS系统提出读取文件请求时,按以下步骤完成查询:
步骤(3a-1):从名字节点中查找该文件所对应的数据块;
步骤(3a-2):对每一个数据块分别按照步骤(2-1)所述方法计算数据块Hash值;
步骤(3a-3):按照步骤(2-2)所述方法查找当前数据块所对应的存储节点;
步骤(3a-4):将当前数据块内容从其所对应的存储节点上读出。
7.如权利要求3所述的方法,其特征是,所述步骤(3b-1)包括如下步骤:
步骤(3b-1-1):对新加入的数据节点在名字节点进行注册,加入HDFS集群中;
步骤(3b-1-2):按照步骤(1-1)所述方法计算新数据节点的Hash值;
步骤(3b-1-3):采用二分插入排序算法,在Hash链元数据表中插入新数据节点的物理地址与Hash值的映射记录;
步骤(3b-1-4):在Hash链中找到新数据节点的后继节点,将所述后继结点中数据块Hash值小于或等于新数据节点Hash值的数据块全部迁移到新数据节点上;
步骤(3b-1-5):在名字节点上对新数据节点及其后继节点的信息进行更新。
8.如权利要求3所述的方法,其特征是,所述步骤(3b-2)包括如下步骤:
步骤(3b-2-1):从名字节点中读取失效节点的物理地址、失效节点上各数据块标号及其冗余节点位置;
步骤(3b-2-2):按照步骤(1-1)所述方法计算失效节点的Hash值;
步骤(3b-2-3):根据失效节点的Hash值,通过二分查找算法,在Hash链元数据表中找到该失效节点,记录其第一个未失效后继节点,作为该失效节点的恢复节点;
步骤(3b-2-4):对存储于失效数据节点上的所有数据块,将其存储在冗余节点的副本拷贝到步骤(3b-2-3)所述的恢复节点上;
步骤(3b-2-5):从Hash链元数据表中删除该失效节点的记录;
步骤(3b-2-6):从名字节点中删除失效节点信息,并更新恢复节点信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410353123.3A CN104077423B (zh) | 2014-07-23 | 2014-07-23 | 一种基于一致性散列的结构化数据存储、查询和迁移方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410353123.3A CN104077423B (zh) | 2014-07-23 | 2014-07-23 | 一种基于一致性散列的结构化数据存储、查询和迁移方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104077423A true CN104077423A (zh) | 2014-10-01 |
CN104077423B CN104077423B (zh) | 2017-05-03 |
Family
ID=51598677
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410353123.3A Active CN104077423B (zh) | 2014-07-23 | 2014-07-23 | 一种基于一致性散列的结构化数据存储、查询和迁移方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104077423B (zh) |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104462324A (zh) * | 2014-12-03 | 2015-03-25 | 浪潮电子信息产业股份有限公司 | 一种hdfs多线程并行下载方法 |
CN105681290A (zh) * | 2016-01-08 | 2016-06-15 | 北京京东尚科信息技术有限公司 | 一种自动过滤网络运营商嵌入http响应内容的方法和装置 |
CN106227465A (zh) * | 2016-07-15 | 2016-12-14 | 中国科学院软件研究所 | 一种环结构的数据放置方法 |
CN106293537A (zh) * | 2016-08-12 | 2017-01-04 | 上海海事大学 | 一种轻量级的数据密集型文件系统的自治块管理方法 |
CN106503139A (zh) * | 2016-10-20 | 2017-03-15 | 上海携程商务有限公司 | 动态数据存取方法及系统 |
CN106789632A (zh) * | 2017-02-25 | 2017-05-31 | 郑州云海信息技术有限公司 | 一种大规模分布式存储系统的节点路由的方法 |
CN106897360A (zh) * | 2017-01-09 | 2017-06-27 | 深圳市中博科创信息技术有限公司 | 基于分布式文件系统的文件处理方法及装置 |
CN107247729A (zh) * | 2017-05-03 | 2017-10-13 | 中国银联股份有限公司 | 一种文件处理方法和装置 |
CN108763381A (zh) * | 2018-05-18 | 2018-11-06 | 深圳市彬讯科技有限公司 | 基于一致性哈希算法的分表方法及设备 |
CN109407985A (zh) * | 2018-10-15 | 2019-03-01 | 郑州云海信息技术有限公司 | 一种数据管理的方法以及相关装置 |
CN109857366A (zh) * | 2019-02-20 | 2019-06-07 | 武汉轻工大学 | 基于外存的插入排序方法、系统、设备及存储介质 |
CN109885423A (zh) * | 2019-01-04 | 2019-06-14 | 上海七印信息科技有限公司 | 一种区块链源数据备份方法 |
CN111290883A (zh) * | 2020-02-16 | 2020-06-16 | 西安奥卡云数据科技有限公司 | 一种基于重删的精简复制方法 |
CN111309260A (zh) * | 2020-02-16 | 2020-06-19 | 西安奥卡云数据科技有限公司 | 一种数据存储节点选择方法 |
CN111930711A (zh) * | 2020-09-10 | 2020-11-13 | 北京志翔科技股份有限公司 | 分布式文件系统集群增加节点的方法、装置及设备 |
CN112667858A (zh) * | 2020-12-25 | 2021-04-16 | 深圳创新科技术有限公司 | 采用hash链存储数据的方法及数据写入、读取方法 |
CN113382040A (zh) * | 2021-05-08 | 2021-09-10 | 深圳市科思科技股份有限公司 | 负载均衡方法、电子设备及计算机可读存储介质 |
CN114979162A (zh) * | 2022-05-16 | 2022-08-30 | 中国工商银行股份有限公司 | 节点部署方法和网络系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101729390A (zh) * | 2008-10-22 | 2010-06-09 | 中国移动通信集团公司 | 分布式哈希表dht网络及其构建方法、节点 |
US20120078915A1 (en) * | 2010-09-29 | 2012-03-29 | Jeffrey Darcy | Systems and methods for cloud-based directory system based on hashed values of parent and child storage locations |
-
2014
- 2014-07-23 CN CN201410353123.3A patent/CN104077423B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101729390A (zh) * | 2008-10-22 | 2010-06-09 | 中国移动通信集团公司 | 分布式哈希表dht网络及其构建方法、节点 |
US20120078915A1 (en) * | 2010-09-29 | 2012-03-29 | Jeffrey Darcy | Systems and methods for cloud-based directory system based on hashed values of parent and child storage locations |
Non-Patent Citations (1)
Title |
---|
张启飞等: "基于对等网络的面向小文件的云存储系统", 《浙江大学学报》 * |
Cited By (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104462324A (zh) * | 2014-12-03 | 2015-03-25 | 浪潮电子信息产业股份有限公司 | 一种hdfs多线程并行下载方法 |
CN105681290B (zh) * | 2016-01-08 | 2018-11-02 | 北京京东尚科信息技术有限公司 | 一种自动过滤网络运营商嵌入http响应内容的方法和装置 |
CN105681290A (zh) * | 2016-01-08 | 2016-06-15 | 北京京东尚科信息技术有限公司 | 一种自动过滤网络运营商嵌入http响应内容的方法和装置 |
CN106227465B (zh) * | 2016-07-15 | 2019-05-14 | 中国科学院软件研究所 | 一种环结构的数据放置方法 |
CN106227465A (zh) * | 2016-07-15 | 2016-12-14 | 中国科学院软件研究所 | 一种环结构的数据放置方法 |
CN106293537A (zh) * | 2016-08-12 | 2017-01-04 | 上海海事大学 | 一种轻量级的数据密集型文件系统的自治块管理方法 |
CN106293537B (zh) * | 2016-08-12 | 2019-11-12 | 上海海事大学 | 一种轻量级的数据密集型文件系统的自治块管理方法 |
CN106503139A (zh) * | 2016-10-20 | 2017-03-15 | 上海携程商务有限公司 | 动态数据存取方法及系统 |
CN106897360A (zh) * | 2017-01-09 | 2017-06-27 | 深圳市中博科创信息技术有限公司 | 基于分布式文件系统的文件处理方法及装置 |
CN106789632A (zh) * | 2017-02-25 | 2017-05-31 | 郑州云海信息技术有限公司 | 一种大规模分布式存储系统的节点路由的方法 |
CN107247729A (zh) * | 2017-05-03 | 2017-10-13 | 中国银联股份有限公司 | 一种文件处理方法和装置 |
CN108763381A (zh) * | 2018-05-18 | 2018-11-06 | 深圳市彬讯科技有限公司 | 基于一致性哈希算法的分表方法及设备 |
CN109407985A (zh) * | 2018-10-15 | 2019-03-01 | 郑州云海信息技术有限公司 | 一种数据管理的方法以及相关装置 |
CN109407985B (zh) * | 2018-10-15 | 2022-02-18 | 郑州云海信息技术有限公司 | 一种数据管理的方法以及相关装置 |
CN109885423A (zh) * | 2019-01-04 | 2019-06-14 | 上海七印信息科技有限公司 | 一种区块链源数据备份方法 |
CN109885423B (zh) * | 2019-01-04 | 2023-05-23 | 上海七印信息科技有限公司 | 一种区块链源数据备份方法 |
CN109857366A (zh) * | 2019-02-20 | 2019-06-07 | 武汉轻工大学 | 基于外存的插入排序方法、系统、设备及存储介质 |
CN111309260A (zh) * | 2020-02-16 | 2020-06-19 | 西安奥卡云数据科技有限公司 | 一种数据存储节点选择方法 |
CN111290883A (zh) * | 2020-02-16 | 2020-06-16 | 西安奥卡云数据科技有限公司 | 一种基于重删的精简复制方法 |
CN111930711A (zh) * | 2020-09-10 | 2020-11-13 | 北京志翔科技股份有限公司 | 分布式文件系统集群增加节点的方法、装置及设备 |
CN112667858A (zh) * | 2020-12-25 | 2021-04-16 | 深圳创新科技术有限公司 | 采用hash链存储数据的方法及数据写入、读取方法 |
CN113382040A (zh) * | 2021-05-08 | 2021-09-10 | 深圳市科思科技股份有限公司 | 负载均衡方法、电子设备及计算机可读存储介质 |
CN114979162A (zh) * | 2022-05-16 | 2022-08-30 | 中国工商银行股份有限公司 | 节点部署方法和网络系统 |
CN114979162B (zh) * | 2022-05-16 | 2024-02-09 | 中国工商银行股份有限公司 | 节点部署方法和网络系统 |
Also Published As
Publication number | Publication date |
---|---|
CN104077423B (zh) | 2017-05-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104077423A (zh) | 一种基于一致性散列的结构化数据存储、查询和迁移方法 | |
US10268697B2 (en) | Distributed deduplication using locality sensitive hashing | |
US10140351B2 (en) | Method and apparatus for processing database data in distributed database system | |
CN106066896B (zh) | 一种应用感知的大数据重复删除存储系统及方法 | |
US7505960B2 (en) | Scalable retrieval of data entries using an array index or a secondary key | |
US10810161B1 (en) | System and method for determining physical storage space of a deduplicated storage system | |
US20110320532A1 (en) | Data operating method, system, client, and data server | |
CN103581331B (zh) | 虚拟机在线迁移方法与系统 | |
US20130006993A1 (en) | Parallel data processing system, parallel data processing method and program | |
CN105550371A (zh) | 一种面向大数据环境的元数据组织方法和系统 | |
CN105069111A (zh) | 云存储中基于相似性的数据块级数据去重方法 | |
JP2005267600A5 (zh) | ||
CN104408111A (zh) | 一种删除重复数据的方法及装置 | |
CN108090125B (zh) | 一种非查询式的重复数据删除方法及装置 | |
CN102890678A (zh) | 一种基于格雷编码的分布式数据布局方法及查询方法 | |
CN106570113B (zh) | 一种海量矢量切片数据云存储方法及系统 | |
CN104111924A (zh) | 一种数据库系统 | |
CN103631894A (zh) | 一种基于hdfs的动态副本管理方法 | |
CN112148680B (zh) | 一种基于分布式图数据库的文件系统元数据管理方法 | |
CN115114294A (zh) | 数据库存储模式的自适应方法、装置、计算机设备 | |
He et al. | Data deduplication technology for cloud storage | |
CN102955808A (zh) | 一种数据获取方法和分布式文件系统 | |
CN113641686B (zh) | 数据处理方法、装置、电子设备、存储介质及程序产品 | |
CN106293537B (zh) | 一种轻量级的数据密集型文件系统的自治块管理方法 | |
Nakamura et al. | Content-defined merkle trees for efficient container delivery |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |