一种HDFS的存储结构优化方法与流程

文档序号:14249646阅读:387来源:国知局
一种HDFS的存储结构优化方法与流程

本发明涉及一种hdfs存储结构的优化方法。



背景技术:

hdfs是在gfs分布式文件系统的基础上开源实现的,因此,hdfs具有gfs的特性。gfs是由google开发的,它具有极强的容错能力、优异的扩展性,被广泛应用于高效存储和读取海量分布式数据的应用当中。通过深入地剖析gfs的特性和原理能够从本质上对hdfs进行理解。通常情况下,文件系统的集群由一个master附带多个chunkserver组成,并可以通过多个client进行访问。当client发出存储文件请求时,首先将文件分割成大小固定的chunk块;然后,master给每个chunk块分配唯一的标识chunkunicode;最终,chunk块被存储在本地磁盘上,并依据对应的chunkunicode和字节范围实现chunkserver的读写操作。默认情况下,gfs会将每个chunk块复制保存到3个chunkserver上,以确保数据的稳定和安全,并且可以通过改变文件命名空间的设置完成不同的备份策略。图3展示了gfs架构运行的流程:其中,命名规则、访问控制、映射表等元数据信息保存在master的内存或硬盘中。master管理这些信息的同时,还通过心跳协议完成chunk块的校验、备份、迁移等系统策略的实施。

现有技术介绍:

hdfs具有以下存储策略:

容错机制:hdfs默认为每个数据创建三个副本块,第一个副本设置在本地机架的节点上;第二个副本存放在另一个节点的第一个相同机架上;第三个放置在该节点的不同机架上。hdfs文件存储的过程中有两种常见的错误:一种是节点故障,另一种是数据损坏。

节点故障主要是指由网络分区导致的datanode故障:datanode定期向namenode发送心跳消息,如果namenode在规定时间内没有收到datanode的消息,datanode就会被认为是无序的,会被标记为死节点。由于死节点的存在,namenode会不断检测到数据副本的不足,随即会启动复制机制。

数据损坏是指从datanode读取的数据发生损坏现象:hdfs采用校验文件方式检测数据的完整性。当客户端创建文件时,新文件包含数据块的总和会被保存在校验文件的校验数中。客户端读取文件时,数据块数的总和将与校验文件中的校验数进行比对,若二者相同,则数据完整,否则将读取其他数据块进行复制补充。

平衡机制:hdfs的平衡指文件块良好地分布于集群的每个节点上。文件块的分布是一个动态过程,hdfs提供了平衡器工具以确保存储结果的平衡。

故障检查和自动快速恢复能力是hdfs的核心目标。心跳机制实现了故障节点的检测,通常使用这种机制验证节点的可靠性,以便在写入文件之前完成datanode节点的过滤工作,从而将失效后的被动检测转换为使用前的主动筛选。机制的形式化描述如下:

(1)namenode根据用户和数据字符的需要给出可靠阈值h;

(2)namenode计算离客户端最近的机架;

(3)量化机架中所有节点的可靠性,将可靠性阈值小于h的节点删除;

(4)量化剩余节点的存储成本;

(5)将存储两个副本的机架定义为rack1和rack2。判断步骤(2)中选择的机架是否标记为rack1,若未标记,则将其作为rack1处理,否则作为rack2处理。以最低的存储成本选择rack1或rack2的节点;

(6)若集群处于平衡,则确定节点并标记机架,否则重新计算机架并再次选择节点;

(7)若rack2已被标记,则写入数据并删除正在操作中机架的名称,否则再次计算机架、选择节点。

现有技术主要缺点:

1,存在大量重复数据。

2,在消除冗余数据方面一般是通过hash函数判断数据重复项,但由于哈希冲突问题,导致不同的块有相同的hash值。



技术实现要素:

本发明的目的在于克服现有技术的不足,提供一种可实现标签化去重的hdfs存储结构的优化方法。

本发明的目的是通过以下技术方案来实现的:一种hdfs存储结构的优化方法,具体实现步骤如下:

第一步,分别对数据文件分割的数据块进行指纹计算;

第二步,利用hash函数完成指纹匹配,若出现相同值,则判定该块重复;

第三步,重复块存储对应的索引,新数据块进行存储和更新指纹库流程;

第四步,更新文件的元数据信息(文件的数据块组成情况);

第五步,通过cubehash函数计算hash值,并引入关键词提取策略、特征向量权值计算、余弦系数法进行数据的相同和相似性判断;

第六步,根据标签删除重复数据。

作为优选方式,通过md5或sha-1分别对数据文件分割的数据块进行指纹计算,通过与指纹计算同样的hash函数完成指纹匹配,若出现相同值,则判定该块重复。

作为优选方式,数据文件分割主要采用滑块切分,采用固定大小的滑块窗口进行数据块的划分,因此得到了大小固定的数据块;结合强弱校验方法匹配每次滑动后数据块的hash值,若两者均匹配则完成边界确定流程,否则滑块继续向后滑动一个字节;滑块切分方法能高效地处理插入和删除问题。

作为优选方式,引入sha-3候选算法中cubehash算法计算哈希值的基础上,对数据块进行关键词的提取,同时对提取到的关键词条(t1,t2,…,tn)进行特征向量的抽取,即获得关键词在文件块中的权重(w1,w2,…,wn),然后在cubehash指纹值的后面加上(t1,t2,…,tn)和(w1,w1,…,wn)。

作为优选方式,设计元数据表和索引表;

设计元数据表,为重删后文件的快速恢复提供了便利条件;将一个文件的信息作为一条元数据记录进行存储,元数据表的两列分别包含:文件存储的绝对路径、分块大小、块偏移量、块“cubehash值+关键词+特征向量”等信息;

将索引表存放在hbase中,在重删处理和索引查询两方面都保证了良好的可扩展性,通过元数据服务器管理控制各重删节点,协调各重删节点的任务处理进度;

结合以上两个表就可以将误删文件恢复,当需要恢复重删的文件时,首先根据文件相对路径查找元数据表,获取元数据信息;遍历分块信息,获取标签值;利用标签匹配索引表信息,得到数据块的绝对路径,这样一次遍历之后,即可将文件恢复。

作为优选方式,首先,使用分词技术对文本进行分段、断句、分词等处理;然后,根据实际情况设计影响关键词特征抽取的相关属性的权值;最终,在给定特征属性权值的基础上利用关键词选取算法进行候选集的排序。

作为优选方式,关键词的提取技术采用基于语义的中文文本关键词提取算法和/或基于朴素贝叶斯模型的中文关键词提取算法。

作为优选方式,结合tf-idf自动提取关键词策略设计出了下面基于中文文本关键词候选集的权重分布:

词频:

其中t为文本的总词数,fi为词语i在文本中出现的次数;tfi会随着fi个数的增多不断升高但不能超过1,即在文本中出现次数越多的词成为关键词的可能性越大;由式(3.1)发现tfi并非线性增长,当fi达到一定程度时,tfi趋向于稳定,这种变化趋势更接近实际的语言环境;

逆文档概率:

其中idf代表逆文档率,cor表示语料库中文档的总数,total代表包含该词的文档的数量(一般以google搜索为准);一个词越常见,那么上式中的分母越大,逆文档率就越低,无限接近于0,为防止total等于0的发生将分母做加1处理;

词性:不同的词性在句子结构中起着不同的作用,对文本的代表能力也不相同,因此必须赋予不同词性不同的权值,具体情况如式(3.3)所示:

位置:同一个词出现在文件的不同位置,所能反映文件主题的价值也会有所不同,因此必须根据其所在位置设置不同的权值,如式(3.4):

其中词在标题、段首、段尾和正文中出现的次数分别用t1、t2、t3、t4表示,数字代表不同位置的权重;

根据以上对相关属性的分析和具体量化结果,结合线性加权的方法,对于词i的权重计算公式如式(3.5)所示:

mi=a1*tfi*idf+a2*parti+a3*posi(3.5)

词i在文件中的权重即为mi,a1~a3为各属性在加权公式中的比重系数,代表了其重要程度;相关研究表明,a1~a3被赋予0.8,1.1,1.0的系数值;按降序排列每个词的mi值,即可得到关键词的候选集;

由单纯线性计算得到的候选集序列不一定是最优的关键词排列序列,因此,可以通过朴素贝叶斯算法对求解过程进行改造,将候选集排列,并将两次候选集做对比处理,根据用户指定个数n来确定两个序列中相同的关键词作为最终关键词解集;

贝叶斯定理:设b1,b2,……,bn为n个互不相容事件,且a是任一事件,且p(a)>0;p(bi|a)是在条件a下bi的后验概率,p(bi)表示bi的先验概率,p(bi|a)比p(bi)基于更多的信息;对于任一bi,有:

由以上各属性权重设计可以看出,他们的取值都介于0,1之间,并反映了候选词是关键词时的概率;设p(k)(k=1,2,3)为对应属性的权重,则1-p(k)反映了候选词不是关键词时的概率;结合式(3.6)设计如下公式:

其中pw(tfi-idf|y),pw(pai|y),pw(poi|y)分别表示候选关键词i是tfi*idf,parti,posi的概率,pw(y|tfi-idf,pai,poi)表示词i是关键词的概率;同样地,pw(tfi-idf|n),pw(pai|n),pw(poi|n)分别表示候选关键词i不是关键词是对应的1-tfi*idf,1-parti,1-posi的值;为了归一化处理,引入分母pw(tfi-idf,pai,poi);最后,词i成为关键词的概率可由式(3.9)进行计算;

对pw进行降序排列,将候选词序列与线性加权得到的候选关键词序列进行对比,最后解集为前n个相同的候选词。

作为优选方式,文本之间的相似度匹配一般分为以下两个步骤:一是对文本进行特征向量集的抽取,二是将文本的相似度计算转换为集合间的运算;以集合运算得到的结果为依据进行重复数据的判定,如果结果大于给定阈值,则两个文本互相重复,否则不作处理。

作为优选方式,选定中文分词器对文件进行分词;通过引入停用词原则,加强文本相似度判定的针对性,特征向量抽取过程中过滤掉各种标点符号、常用虚词(如介词、连词等)和特殊符号,降低抽取的复杂度;

向量空间模型(vsm)的基本原理为:以词与词之间的不相关性为前提,利用向量表示文本,一个维度选定一个单独的词;这样相互独立的关键词条(t1,t2,…,tn)就能够组成文件dk,每个关键词条在文件块中的重要程度不同,分别设定权值为wi,则最后可以用向量(w1,w1,…,wn)表示dk;

完成特征向量抽取后,可以通过余弦系数方法求解文档之间的相似度,如式(3.10)所示;其中wki、wpi分别是词ti在dk和dp的权值,n是向量的维度;

重复数据的判定过程以上式的计算结果为依据,若结果大于阈值则认为数据块包含的内容为重复内容,不需要进行实际存储,调整对应的指针信息即可,否则进行新数据块的存储工作。

本发明的有益效果是:本发明设计合理,实现了标签化去重,使得hdfs的存储结构得到优化。

附图说明

图1为删重技术流程图;

图2为标签化去重流程图;

图3为hdfs架构图;

图4为滑块切分方法;

图5为数据集;

图6为重删率与块大小的关系;

图7为重删耗时与块大小的关系;

图8为各项耗时示意图。

具体实施方式

下面结合附图进一步详细描述本发明的技术方案,但本发明的保护范围不局限于以下所述。

在一个实施例中,环境搭建如下:

集群的硬件环境在前面已经介绍过了,集群的配置为:四台服务器,其中一台master做为主节点,slave1、slave2、slave3为三台数据节点。详细的安装步骤如下:

运行jps命令查看启动情况。

base是hadoop平台上应用最广泛的nosql数据库,具有列式存储、随机读写、负载均衡和动态扩展等特点。数据管理系统使用hbase存储索引表和元数据存储,可以有效避免频繁的磁盘访问,始终保持较高的读写速率。因此利用nutch进行网络数据的爬虫,同时mapreduce并行框架实行分布式重删聚类处理,hdfs负责存储经过重删处理后的数据,在hbase数据库中构建聚类处理之后的索引表,实现高效数据块索引查询。

nutch的版本为2.3.1,将下载的源码解压到/opt目录下,并将hadoop-env.sh、yarn-env.sh、core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml、slaves七个文件复制到conf目录下。deploy和local两个文件包含在runtime文件夹中,其中local代表本地抓取,而deploy代表的是分布式抓取。因为本文采用分布式抓取方案,所以使用的是deploy中的nutch命令,hbase的版本为0.98.9。

下载ictclas中文分词器,编译plugins.xml文件修改的部分,将原有的class文件替换为编译后生成的,完成分词结构的配置。

在hadoop集群已经正常启动的情况下,hbase安装部署步骤如下:

环境搭建好后需要实现优化方法,如图1和图2所示,一种hdfs存储结构的优化方法,具体实现步骤如下:

第一步,分别对数据文件分割的数据块进行指纹计算(md5或sha-1);

第二步,利用hash函数完成指纹匹配,若出现相同值,则判定该块重复;

第三步,重复块存储对应的索引,新数据块进行存储和更新指纹库流程;

第四步,更新文件的元数据信息(文件的数据块组成情况)。

第五步,通过cubehash函数计算hash值,并引入关键词提取策略、特征向量权值计算、余弦系数法进行数据的相同和相似性判断。

第六步,根据标签删除重复数据。

在一个优选实施例中,引入了删重技术与标签化去重。

在一个优选实施例中,数据文件分割主要采用滑块切分;采用固定大小的滑块窗口进行数据块的划分,因此得到了大小固定的数据块。结合强弱校验方法匹配每次滑动后数据块的hash值,若两者均匹配则完成边界确定流程,否则滑块继续向后滑动一个字节,如图4所示。滑块切分方法能高效地处理插入和删除问题。

在一个优选实施例中,引入sha-3候选算法中cubehash算法计算哈希值的基础上,对数据块进行关键词的提取,同时对提取到的关键词条(t1,t2,…,tn)进行特征向量的抽取,即获得关键词在文件块中的权重(w1,w2,…,wn),然后在cubehash指纹值的后面加上(t1,t2,…,tn)和(w1,w1,…,wn)。

为降低索引表存储对系统扩展性的影响,将索引表存放在hbase中。这样在重删处理和索引查询两方面都保证了良好的可扩展性,通过元数据服务器管理控制各重删节点,协调各重删节点的任务处理进度。当集群规模需要扩展时,只需将mapper处理节点和重删存储节点信息添加到集群元数据服务器节点的配置文件中,便可实现在线增加,系统会获得更优的处理性能,完成存储容量扩充的同时自动实现了负载均衡。元数据表(存储文件元数据信息)的设计,为重删后文件的快速恢复提供了便利条件。将一个文件的信息作为一条元数据记录进行存储,元数据表的两列分别包含:文件存储的绝对路径、分块大小、块偏移量、块“cubehash值+关键词+特征向量”(标签值)等信息。但是元数据表中未记录重删后的块存放位置,因此仅凭元数据表无法进行文件的恢复工作,引入索引表概念,除了记录数据块的标签值外,还存储了数据块的存储路径、偏移以及重复次数等信息。结合以上两个表就可以将误删文件恢复,当需要恢复重删的文件时,首先根据文件相对路径查找元数据表,获取元数据信息;遍历分块信息,获取标签值;利用标签匹配索引表信息,得到数据块的绝对路径,这样一次遍历之后,即可将文件恢复。

在一个优选实施例中,首先,使用分词技术对文本进行分段、断句、分词等处理;然后,根据实际情况设计影响关键词特征抽取的相关属性的权值;最终,在给定特征属性权值的基础上利用关键词选取算法进行候选集的排序。

候选词特征向量的权重直接决定了选定的关键词对文本反映的正确与否,因此相关属性权重的设计格外重要。目前,国内外在关键词提取技术上已经取得了相对成熟的研究成果,如基于语义的中文文本关键词提取算法(ske)、基于朴素贝叶斯模型的中文关键词提取算法研等,均能很好地完成关键词提取的工作。本节结合tf-idf自动提取关键词策略设计出了下面基于中文文本关键词候选集的权重分布。

词频:

其中t为文本的总词数,fi为词语i在文本中出现的次数。tfi会随着fi个数的增多不断升高但不能超过1,即在文本中出现次数越多的词成为关键词的可能性越大。由式(3.1)发现tfi并非线性增长,当fi达到一定程度时,tfi趋向于稳定,这种变化趋势更接近实际的语言环境。

逆文档概率:

其中idf代表逆文档率,cor表示语料库中文档的总数,total代表包含该词的文档的数量(一般以google搜索为准)。一个词越常见,那么上式中的分母越大,逆文档率就越低,无限接近于0,为防止total等于0的发生将分母做加1处理。

词性:不同的词性在句子结构中起着不同的作用,对文本的代表能力也不相同,因此必须赋予不同词性不同的权值,具体情况如式(3.3)所示:

位置:同一个词出现在文件的不同位置,所能反映文件主题的价值也会有所不同,因此必须根据其所在位置设置不同的权值,如式(3.4):

其中词在标题、段首、段尾和正文中出现的次数分别用t1、t2、t3、t4表示,数字代表不同位置的权重。

根据以上对相关属性的分析和具体量化结果,结合线性加权的方法,对于词i的权重计算公式如式(3.5)所示:

mi=a1*tfi*idf+a2*parti+a3*posi(3.5)

词i在文件中的权重即为mi,a1~a3为各属性在加权公式中的比重系数,代表了其重要程度。相关研究表明,a1~a3被赋予0.8,1.1,1.0的系数值。按降序排列每个词的mi值,即可得到关键词的候选集。

由单纯线性计算得到的候选集序列不一定是最优的关键词排列序列,因此,可以通过朴素贝叶斯算法对求解过程进行改造,将候选集排列,并将两次候选集做对比处理,根据用户指定个数n来确定两个序列中相同的关键词作为最终关键词解集。

贝叶斯定理:设b1,b2,……,bn为n个互不相容事件,且a是任一事件,且p(a)>0。p(bi|a)是在条件a下bi的后验概率,p(bi)表示bi的先验概率,p(bi|a)比p(bi)基于更多的信息。对于任一bi,有:

由以上各属性权重设计可以看出,他们的取值都介于0,1之间,并反映了候选词是关键词时的概率。设p(k)(k=1,2,3)为对应属性的权重,则1-p(k)反映了候选词不是关键词时的概率。结合式(3.6)设计如下公式:

其中pw(tfi-idf|y),pw(pai|y),pw(poi|y)分别表示候选关键词i是tfi*idf,parti,posi的概率,pw(y|tfi-idf,pai,poi)表示词i是关键词的概率。同样地,pw(tfi-idf|n),pw(pai|n),pw(poi|n)分别表示候选关键词i不是关键词是对应的1-tfi*idf,1-parti,1-posi的值。为了归一化处理,引入分母pw(tfi-idf,pai,poi)。最后,词i成为关键词的概率可由式(3.9)进行计算。

对pw进行降序排列,将候选词序列与线性加权得到的候选关键词序列进行对比,最后解集为前n个相同的候选词。

在一个优选实施例中,文本之间的相似度匹配一般分为以下两个步骤:一是对文本进行特征向量集的抽取,二是将文本的相似度计算转换为集合间的运算。以集合运算得到的结果为依据进行重复数据的判定,如果结果大于给定阈值,则两个文本互相重复,否则不作处理。

选定比较权威的中文分词器(中国科学院计算技术研究所研制的汉语言词法分析系统ictclas)对文件进行分词。同时通过引入停用词原则,加强文本相似度判定的针对性,特征向量抽取过程中过滤掉各种标点符号、常用虚词(如介词、连词等)和特殊符号,降低抽取的复杂度。

向量空间模型(vsm)的基本原理为:以词与词之间的不相关性为前提,利用向量表示文本,一个维度选定一个单独的词。这样相互独立的关键词条(t1,t2,…,tn)就能够组成文件dk,每个关键词条在文件块中的重要程度不同,分别设定权值为wi,则最后可以用向量(w1,w1,…,wn)表示dk。

完成特征向量抽取后,可以通过余弦系数方法求解文档之间的相似度,如式(3.10)所示。其中wki、wpi分别是词ti在dk和dp的权值,n是向量的维度。

重复数据的判定过程以上式的计算结果为依据,若结果大于阈值(这里设定为98.9%)则认为数据块包含的内容为重复内容,不需要进行实际存储,调整对应的指针信息即可,否则进行新数据块的存储工作。

从图5至图7可以看出,数据分块越大,划分粒度越粗糙,重删率越低,重删处理的耗时也逐渐减少。由重删率和数据分块之间的关系可知数据分块越大,其被判定为重复块的概率就越小,标签计算和索引查找的次数也会相对应的减少,重删处理的时间就会变短。观察图中数据发现,当分块大小由1mb增长到6mb时重删率下降较为缓慢,但重删时间却接近指数级下降,以dsl为例,重删率下降约为6%,而重删时间却减少了约0.27h。说明在这个过程中,重删时间相对于重删率对分块大小更敏感。当数据分块大小从6mb增加到15mb时,重删率急剧下降,但重删时间下降较为缓慢,验证了重删耗时与分块大小的关系。综合考虑以上情况,本次实验后续工作在分块大小为6mb的基础上完成。

模型的重删分为重删处理和数据存储两个步骤。其中,重删处理包括数据分块、标签计算、索引查找、元数据表写入等几个步骤,将去重处理后的数据块写入hdfs为数据存储的主要工作。以6mb的分块进行实验(图8),dsl的重删处理与存储时间的比例约为2:3,ds2数据存储时间比重删时间高7%左右,ds3两个步骤的耗时已基本接近。综合实验结果,节点为2时,hdfs数据写入速度较慢,增加了存储时耗,当节点数量增加到4个时,系统自动实现负载均衡,每个节点存储的数据量基本均衡。模型对节点实现了动态调整,校验了hdfs的读写性能,发现小文件数据集(ds1)的写入操作需要更高的时耗。

优选实施例的主要思想是:

1、重复数据删除。重删技术的设计思想为:对存储数据分块,判断是否已存储该分块,若已存在则将实际存储替换为指向已存储块的指针,否则存储新数据块。首先,分别对数据文件分割的数据块进行指纹计算(md5或sha-1);其次,利用hash函数完成指纹匹配,若出现相同值,则判定该块重复;再次,重复块存储对应的索引,新数据块进行存储和更新指纹库流程;最后,更新文件的元数据信息(文件的数据块组成情况)。

2、标签化模型的建立。通过cubehash函数计算hash值,并引入关键词提取策略、特征向量权值计算、余弦系数法进行数据的相同和相似性判断,解决了单纯地依靠hash值判断数据重复性的问题,实现了近似无误差的重删处理。

方案具有以下特点:

1、提出一种基于hadoop平台的分布式重删存储解决方案,使用mapreduce并行编程框架进行数据分块与标签值计算,优化了重删处理。

2、通过将索引表存放在hbase分布式非关系型数据库中,达到了标签遍历和数据写入并行化的效果,通过变更节点数量在扩展了标签索引遍历空间、并行化存储的基础上提升了磁盘的查询性能。使用hdfs文件系统对去重处理后的数据进行存储,充分保证数据可用性的同时,实现了并行读写。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,应当指出的是,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1