数据入库的方法、装置和设备与流程

文档序号:15615579发布日期:2018-10-09 21:17阅读:345来源:国知局

本发明涉及计算机领域,尤其涉及一种数据入库的方法、装置和设备。



背景技术:

据互联网数据中心(idc)多年的研究结果表明,全球数据量大约每2年翻一番,每年产生的数据量按指数增长,数据增速符合摩尔定律,预计到2020年,全球总数据量将达到35zb。如何对这些海量数据进行有效采集、加载、分析和处理已成为大数据应用的一个重要环节及基础。

为实现海量数据的快速处理,一个重要前提是实现海量数据的快速入库,然而随着数据体量越来越庞大,数据入库环节对网络及磁盘的io性能压力急剧增加,在现有网络及磁盘io技术性能瓶颈下,如何提升大数据入库性能是摆在技术人员面前的难题。

hbase是hadoop核心子项目,它是基于分布式文件系统(hdfs)上面向列的分布式数据库系统,非常擅长实时随机读写大规模数据集。但是随着hbase入库数据量越来越大,入库性能越来越成为企业、开发人员需要解决的难题。

现有技术中,当前解决hbase入库性能的主流解决方案可以归纳为三大类:

方案一是对hbase客户端进行配置参数调优,基本原理是在client端数据积累到设置阈值后再提交regionserver,此方法可有效减少rpc连接次数。

方案二是在hbase服务器端配置rpchandler数量参数。hbaseregionserver通过rpchandler接收外部请求并进行处理,此方法通过提升rpchandler数量可以在一定程度上提高hbase入库请求接收能力(handler数量有限制,依赖节点硬件)。

方案三是数据压缩,常用hbase数据压缩算法包括gzip、lzo以及snappy。

上述三种解决方案在实际应用中都会被逐层采纳使用。其中方案一和方案二的使用效果均与hbase自身产品版本以及handler数量相关,能提升的性能较为固定。而方案三提到的常用hbase数据压缩算法,虽然在实际生产项目中也经常会使用,但是这三种数据压缩算法适用的应用场景不尽相同,算法本身也具备一些不同的局限性。在使用gzip、lzo、zippy/snappy中任意一种压缩算法进行工程实践时,都会不可避免遇到网络及磁盘的io压力大从而导致出现入库性能受影响的问题。

综上,现有技术中存在以下技术问题:由于网络及磁盘的io压力大影响数据入库性能。



技术实现要素:

本发明实施例提供了一种数据入库的方法,能够减轻网络及磁盘的io压力,保证数据入库性能。

本发明实施例还提供了一种数据入库的装置,能够减轻网络及磁盘的io压力,保证数据入库性能。

本发明实施例还提高了一种设备,能够减轻网络及磁盘的io压力,保证数据入库性能。

一种数据入库的方法,包括:

启动包括快速排序算法的高速哈夫曼huffman压缩算法对写入数据进行第一次数据压缩生成第一次压缩文件;

第一次压缩文件写入hbase数据库表后,调用二重压缩算法对第一次压缩文件进行第二次数据压缩,输出第二次压缩文件;

基于第二次压缩文件实现hadoop分布式文件系统hdfs数据入库。

其中,所述启动包括快速排序算法的高速huffman压缩算法对写入数据进行第一次数据压缩生成第一次压缩文件,包括:

扫描并统计出写入数据中每个字符出现的频率;

通过快速排序算法基于所述频率对每个字符进行排序;

根据每个字符的长度对每个字符进行再次排序,建立霍夫曼字符编码树;

序列化所述霍夫曼字符编码树得到编码后的二进制数据;

压缩所述编码后的二进制数据生成第一次压缩文件。

其中,所述快速排序算法包括:

排序开始时变量i=0,变量j=n-1,n是数组元素数量;

将第一个数组元素a[0]赋值给key;

在数组中从j开始向j-1方向搜索,找到第一个小于key的值a[j],互换a[j]与a[i];

在数组中从i开始向i+1方向搜索,找到第一个大于key的值a[i],互换a[i]与a[j];

继续在数组中从j开始向j-1方向搜索,没有找到小于key的值则j=j-1,没有找到大于key的值则i=i+1,直到i=j快速排序完成。

其中,所述序列化所述霍夫曼字符编码树得到编码后的二进制数据,包括:

通过树压缩算法序列化所述霍夫曼字符编码树得到编码后的二进制数据。

其中,所述压缩所述编码后的二进制数据生成第一次压缩文件,包括:

对编码后的二进制数据进行分段得到分段数据;

压缩所述分段数据得到分段压缩结果;

合并所述分段压缩结果生成第一压缩文件。

其中,所述二重压缩算法包括snappy算法。

一种数据入库的装置,包括:

第一压缩模块,用于启动包括快速排序算法的高速哈夫曼huffman压缩算法对写入数据进行第一次数据压缩生成第一次压缩文件;

第二压缩模块,用于第一次压缩文件写入hbase数据库表后,调用二重压缩算法对第一次压缩文件进行第二次数据压缩,输出第二次压缩文件;

入库模块,用于基于第二次压缩文件实现hadoop分布式文件系统hdfs数据入库。

其中,所述第一压缩模块还用于,扫描并统计出写入数据中每个字符出现的频率;

通过快速排序算法基于所述频率对每个字符进行排序;

根据每个字符的长度对每个字符进行再次排序,建立霍夫曼字符编码树;

序列化所述霍夫曼字符编码树得到编码后的二进制数据;

压缩所述编码后的二进制数据生成第一次压缩文件。

其中,所述快速排序算法包括:

排序开始时变量i=0,变量j=n-1,n是数组元素数量;

将第一个数组元素a[0]赋值给key;

在数组中从j开始向j-1方向搜索,找到第一个小于key的值a[j],互换a[j]与a[i];

在数组中从i开始向i+1方向搜索,找到第一个大于key的值a[i],互换a[i]与a[j];

继续在数组中从j开始向j-1方向搜索,没有找到小于key的值则j=j-1,没有找到大于key的值则i=i+1,直到i=j快速排序完成。

其中,所述第一压缩模块还用于,通过树压缩算法序列化所述霍夫曼字符编码树得到编码后的二进制数据。

其中,所述第一压缩模块还用于,对编码后的二进制数据进行分段得到分段数据;

压缩所述分段数据得到分段压缩结果;

合并所述分段压缩结果生成第一压缩文件。

其中,所述二重压缩算法包括snappy算法。

一种设备,

存储器,用于存储程序;

处理器,用于运行所述存储器中存储的所述程序,以执行以下步骤:

启动包括快速排序算法的高速哈夫曼huffman压缩算法对写入数据进行第一次数据压缩生成第一次压缩文件;

第一次压缩文件写入hbase数据库表后,调用二重压缩算法对第一次压缩文件进行第二次数据压缩,输出第二次压缩文件;

基于第二次压缩文件实现hadoop分布式文件系统hdfs数据入库。

从上述技术方案中可以看出,在本发明实施例中启动包括快速排序算法的高速huffman压缩算法对写入数据进行第一次数据压缩生成第一次压缩文件;第一次压缩文件写入hbase数据库表后,调用二重压缩算法对第一次压缩文件进行第二次数据压缩,输出第二次压缩文件;基于第二次压缩文件实现分布式文件系统hdfs数据入库。对写入数据采用二次压缩,减小入库数据的数量,进而能够减轻网络及磁盘的io压力,保证数据入库性能。

附图说明

从下面结合附图对本发明的具体实施方式的描述中可以更好地理解本发明其中,相同或相似的附图标记表示相同或相似的特征。

图1是本发明实施例中数据入库的方法流程示意图;

图2是启动高速huffman压缩算法对写入数据进行第一次数据压缩生成第一次压缩文件的流程示意图;

图3是本发明实施例中数据入库的装置结构示意图;

图4是本发明实施例的数据入库的方法和装置的计算设备的示例性硬件架构的结构图。

具体实施方式

为使本发明的目的、技术方案和优点表达得更加清楚明白,下面结合附图及具体实施例对本发明再作进一步详细的说明。

在本发明实施例中,首先启动包括快速排序算法的高速huffman压缩算法对写入数据进行第一次数据压缩生成第一次压缩文件。然后,调用二重压缩算法对第一次压缩文件进行第二次数据压缩,基于第二次压缩文件实现hdfs数据入库。考虑cpu性能压力和压缩效率对写入数据采用二次压缩,减小入库数据的数量,进而能够减轻网络及磁盘的io压力,保证数据入库性能。

参见图1是本发明实施例中数据入库的方法流程示意图,具体包括:

s101、启动包括快速排序算法的huffman压缩算法对写入数据进行第一次数据压缩生成第一次压缩文件。

hbase客户端提请申请准备数据写入hbase数据库,写入数据包括文件及数据流(如socket数据流)。

由hbase客户端启动写入hbase数据库前的第一次数据压缩工作,此环节由hbase客户端操作启动高速huffman压缩算法,通过高速huffman压缩,输出第一次压缩文件。

传统huffman压缩算法在编码环节需要对原始数据扫描两遍,第一遍扫描要精确地统计出原始数据中的每个值出现的频率,第二遍是建立霍夫曼树并进行编码,由于需要建立二叉树并遍历二叉树生成编码,因此数据压缩和还原速度都较慢。

本发明实施例中,通过对传统huffman压缩算法数据处理过程的多个环节进行修改和补充,显著提升传统huffman压缩算法字符排序速度、减少传统huffman压缩算法数的存储空间、提升传统huffman压缩算法压缩速度,有效解决了传统huffman压缩速度较慢的技术问题。具体参s201-s205。

s102、第一次压缩文件写入hbase数据库表后,调用二重压缩算法对第一次压缩文件进行第二次数据压缩,输出第二次压缩文件。

在生成第一次压缩文件后,按照一般性调用hbase写服务api流程类同,启动hbase客户端hbase写入工作。

在hbase内部通过hmaster、hregionserver、hregion、hfile和memstore最终实现第一次压缩文件写入hbase数据库表。

在第一次压缩文件完成hbase数据库表写入后,需要继续调用分布式文件系统(dfs)客户端实现hadoophdfs数据写入。在dfs客户端进行hdfs数据写入前,需要进行二次压缩,此时由dfs客户端调用二重压缩算法snappy,通过snappy实现对数据二次压缩,并输出第二次压缩文件。

s103、基于第二次压缩文件实现hadoop分布式文件系统hdfs数据入库。

基于snappy的第二次压缩文件,由dfs客户端实现hdfs数据写入。至此,数据于hbase入库的全过程完成。

在本发明实施例中,首先启动包括快速排序算法的高速huffman压缩算法对写入数据进行第一次数据压缩生成第一次压缩文件。其次,调用二重压缩算法对第一次压缩文件进行第二次数据压缩。最后,基于第二次压缩文件实现hadoophdfs数据入库。充分利用huffman及snappy的压缩特性能够避免单一压缩算法存在性能瓶颈,考虑cpu性能压力和压缩效率的同时对写入数据采用二次压缩,减小入库数据的数量,进而能够减轻网络及磁盘的io压力,保证数据入库性能。

参见图2是启动高速huffman压缩算法对写入数据进行第一次数据压缩生成第一次压缩文件的流程示意图,包括:

huffman是一种常用的压缩方法,是1952年为文本文件建立的,其基本原理是频繁使用的数据用较短的代码代替,很少使用的数据用较长的代码代替,每个数据的代码各不相同,这些代码都是二进制码,且码长是可变的。

s201、扫描并统计出写入数据中每个字符出现的频率。

扫描写入数据。通过扫描,精确地统计出写入数据中的每个字符出现的频率。其中,字符可以包括具体的数值和/或符号。

s202、通过快速排序算法基于每个字符出现的频率对每个字符进行排序。

传统huffman数据压缩算法中更多的是使用插值及冒泡算法,基于字符出现的频率对字符进行排序。为进一步提升huffman算法性能,本发明实施例中引入快速排序算法以提升huffman算法的排序速度。

假设要排序的原始数组是a[0]......a[n-1],首先任意选取一个数据

(通常选用数组的第一个数)作为关键数据,然后将所有比关键数据小的数据都放到关键数据之前,所有比关键数据大的数据都放到关键数据之后,这个过程称为一趟快速排序。

具体来说快速排序算法包括:

1)设置两个变量i、j,排序开始的时候:i=0,j=n-1,n是数组元素数量。

2)以第一个数组元素作为关键数据,赋值给key,即key=a[0]。

3)在数组中从j开始向前即向j-1方向搜索,由后开始向前搜索(j--),找到第一个小于key的值a[j],将a[j]和a[i]互换。

4)在数组中从i开始向后搜索即向i+1方向搜索,由前开始向后搜索(i++),找到第一个大于key的a[i],将a[i]和a[j]互换。

5)重复3)和4),没有找到小于key的值则j=j-1,没有找到大于key的值则i=i+1,直到i=j快速排序完成。

具体来说,在3)和4)中,没找到符合条件的值,即3)中a[j]不小于key,4)中a[i]不大于key的时候改变j、i的值,则使j=j-1,i=i+1,直至找到符合条件的值为止。找到符合条件的值,进行交换的时候i,j指针位置不变。另外,i=j这一过程一定正好是i+或j-完成的时候,此时快速排序完成。

s203、根据每个字符的长度对每个字符进行再次排序,建立霍夫曼字符编码树。

计算每个字符的长度,基于字符的长度对字符进行再次排序,建立霍夫曼字符树,即huffman二叉树,并基于huffman二叉树进行二进制数据编码。

s204、序列化霍夫曼字符编码树得到编码后的二进制数据。

序列化霍夫曼字符编码树得到编码后的二进制数据。可以采用压缩算法对生成的霍夫曼字符编码树进行序列化。例如,可以通过树压缩算法序列化霍夫曼字符编码树得到编码后的二进制数据。采用树压缩算法可以有效减少数据的存储空间。

s205、压缩编码后的二进制数据生成第一次压缩文件。

可以直接压缩编码后的二进制数据生成第一次压缩文件。为了提高性能,还可以采用并行的方式对数据流进行并行分段压缩。

具体的,压缩编码后的二进制数据生成第一次压缩文件具体包括:

对编码后的二进制数据进行分段得到分段数据。然后对每一个分段数据进行压缩得到分段压缩结果。最后合并分段压缩结果生成第一压缩文件。

采用并行的方式对编码后的二级制数据进行并行分段压缩,可以显著提高压缩速度。

本发明实施例中通过对传统huffman数据压缩算法数据处理过程的采用快速排序算法可以提升排序速度。通过树压缩算法序列化霍夫曼字符编码树可以有效减少数据的存储空间。此外,采用并行分段压缩能够显著提高压缩速度。因此,有效解决了传统huffman压缩速度较慢的问题。

参见图3是本发明实施例中数据入库的装置结构示意图,数据入库的装置与数据入库的方法相对应,数据入库的装置具体包括:

第一压缩模块301,用于启动包括快速排序算法的高速huffman压缩算法对写入数据进行第一次数据压缩生成第一次压缩文件。

hbase客户端提请申请准备数据写入hbase数据库,写入数据包括文件及数据流(如socket数据流)。

由hbase客户端启动写入hbase数据库前的第一次数据压缩工作,此环节由hbase客户端操作启动高速huffman压缩算法,通过高速huffman压缩,输出第一次压缩文件。

传统huffman压缩算法在编码环节需要对原始数据扫描两遍,第一遍扫描要精确地统计出原始数据中的每个值出现的频率,第二遍是建立霍夫曼树并进行编码,由于需要建立二叉树并遍历二叉树生成编码,因此数据压缩和还原速度都较慢。

本发明实施例中,通过对传统huffman压缩算法数据处理过程的多个环节进行修改和补充,显著提升传统huffman压缩算法字符排序速度、减少传统huffman压缩算法数的存储空间、提升传统huffman压缩算法压缩速度,有效解决了传统huffman压缩速度较慢的技术问题。

第二压缩模块302,用于第一次压缩文件写入hbase数据库表后,调用二重压缩算法对第一次压缩文件进行第二次数据压缩,输出第二次压缩文件。

在生成第一次压缩文件后,按照一般性调用hbase写服务api流程类同,启动hbase客户端hbase写入工作。

在hbase内部通过hmaster、hregionserver、hregion、hfile和memstore最终实现第一次压缩文件写入hbase数据库表。

在第一次压缩文件完成hbase数据库表写入后,需要继续调用分布式文件系统dfs客户端实现hadoophdfs数据写入。在dfs客户端进行hdfs数据写入前,需要进行数据二次压缩,此时由dfs客户端调用二重压缩算法snappy,通过snappy实现对数据二次压缩,并输出第二次压缩文件。

入库模块303,用于基于第二次压缩文件实现hadoophdfs数据入库。

具体来说,第一压缩模块201还用于,扫描并统计出写入数据中每个字符出现的频率;通过快速排序算法基于每个字符出现的频率对每个字符进行排序;根据每个字符的长度对每个字符进行再次排序,建立霍夫曼字符编码树;序列化霍夫曼字符编码树得到编码后的二进制数据;压缩编码后的二进制数据生成第一次压缩文件。

本发明实施例中通过对传统huffman数据压缩算法数据处理过程的采用快速排序算法可以提升排序速度。通过树压缩算法序列化霍夫曼字符编码树可以有效减少数据的存储空间。此外,采用并行分段压缩能够显著提高压缩速度。因此,有效解决了传统huffman压缩速度较慢的问题。

传统huffman数据压缩算法中更多的是使用插值及冒泡算法,基于字符出现的频率对字符进行排序。为进一步提升huffman算法性能,本发明实施例中引入快速排序算法以提升huffman算法的排序速度。

假设要排序的原始数组是a[0]......a[n-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比关键数据小的数据都放到关键数据之前,所有比关键数据大的数据都放到关键数据之后,这个过程称为一趟快速排序。

具体来说快速排序算法包括:

1)设置两个变量i、j,排序开始的时候:i=0,j=n-1,n是数组元素数量。

2)以第一个数组元素作为关键数据,赋值给key,即key=a[0]。

3)在数组中从j开始向前即向j-1方向搜索,由后开始向前搜索(j--),找到第一个小于key的值a[j],将a[j]和a[i]互换。

4)在数组中从i开始向后搜索即向i+1方向搜索,由前开始向后搜索(i++),找到第一个大于key的a[i],将a[i]和a[j]互换。

5)重复3)和4),没有找到小于key的值则j=j-1,没有找到大于key的值则i=i+1,直到i=j快速排序完成。

具体来说,在3)和4)中,没找到符合条件的值,即3)中a[j]不小于key,4)中a[i]不大于key的时候改变j、i的值,则使j=j-1,i=i+1,直至找到符合条件的值为止。找到符合条件的值,进行交换的时候i,j指针位置不变。另外,i=j这一过程一定正好是i+或j-完成的时候,此时快速排序完成。

具体来说,第一压缩模块301还用于,通过树压缩算法序列化所述霍夫曼字符编码树得到编码后的二进制数据。采用树压缩算法可以有效减少数据的存储空间。

此外,第一压缩模块301还用于,对编码后的二进制数据进行分段得到分段数据;压缩分段数据得到分段压缩结果;合并分段压缩结果生成第一压缩文件。采用并行的方式对编码后的二级制数据进行并行分段压缩,可以显著提高压缩速度。

在本发明实施例中,首先由第一压缩模块301启动包括快速排序算法的高速huffman压缩算法对写入数据进行第一次数据压缩生成第一次压缩文件。其次,第二压缩模块302调用二重压缩算法实现对第一次压缩文件的第二次数据压缩。最后,入库模块303基于第二次压缩文件实现hadoophdfs数据入库。充分看看huffman及snappy的压缩特性能够避免单一压缩算法存在性能瓶颈,考虑cpu性能压力和压缩效率的同时对写入数据采用二次压缩,减小入库数据的数量,进而能够减轻网络及磁盘的io压力,保证数据入库性能。

图4是示出能够实现根据本发明实施例的数据入库的方法和装置的计算设备的示例性硬件架构的结构图。

如图4所示,计算设备400包括输入设备401、输入接口402、中央处理器403、存储器404、输出接口405、以及输出设备406。其中,输入接口402、中央处理器403、存储器404、以及输出接口405通过总线410相互连接,输入设备401和输出设备406分别通过输入接口402和输出接口405与总线410连接,进而与计算设备400的其他组件连接。

具体地,输入设备401接收来自外部(例如,手机终端的摄像头)的输入信息,并通过输入接口402将输入信息传送到中央处理器403;中央处理器403基于存储器404中存储的计算机可执行指令对输入信息进行处理以生成输出信息,将输出信息临时或者永久地存储在存储器404中,然后通过输出接口405将输出信息传送到输出设备406;输出设备406将输出信息输出到计算设备400的外部供用户使用。

也就是说,图4所示的计算设备也可以被实现为包括:存储有计算机可执行指令的存储器;以及处理器,该处理器在执行计算机可执行指令时可以实现结合图1至图3描述的数据入库的方法和装置。

在一个实施例中,图4所示的计算设备400可以被实现为一种设备,该设备可以包括:存储器,用于存储程序;处理器,用于运行所述存储器中存储的所述程序,以执行以下步骤:启动包括快速排序算法的高速哈夫曼huffman压缩算法对写入数据进行第一次数据压缩生成第一次压缩文件;第一次压缩文件写入hbase数据库表后,调用二重压缩算法对第一次压缩文件进行第二次数据压缩,输出第二次压缩文件;基于第二次压缩文件实现hadoop分布式文件系统hdfs数据入库。

在本发明实施例中,首先启动包括快速排序算法的高速huffman压缩算法对写入数据进行第一次数据压缩生成第一次压缩文件。其次,调用二重压缩算法对第一次压缩文件进行第二次数据压缩。最后,基于第二次压缩文件实现hadoophdfs数据入库。充分利用huffman及snappy的压缩特性能够避免单一压缩算法存在性能瓶颈,考虑cpu性能压力和压缩效率的同时对写入数据采用二次压缩,减小入库数据的数量,进而能够减轻网络及磁盘的io压力,保证数据入库性能。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使对应技术方案的本质脱离本发明各实施例技术方案的范围。

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