一种基于HFile批量加载数据的方法技术

技术编号:13798120 阅读:62 留言:0更新日期:2016-10-06 20:30
本发明专利技术提供了一种基于HFile批量加载数据的方法,通过预分分区Region,形成多个分区Region,避免了现有技术中Region分裂过程时间过长的问题;在此基础上,在Map阶段生成HFile文件,避免了Reduce过程,提高了效率;并且,由于在Map阶段就成功生成了HFile文件,因此每生成一个HFile文件后可以保存该文件,避免MapReduce任务失败后,所有的中间结果都被删除的问题,进一步提高了HFile文件记载效率。

【技术实现步骤摘要】

本专利技术涉及数据处理
,尤其涉及一种基于HFile批量加载数据的方法
技术介绍
随着网络技术的飞速发展,数据量的急速增长,为了分析和利用这些庞大的数据资源,传统的技术已然遇到了巨大的障碍,无法胜任大数据分析的任务。而为了满足大数据分析的要求,Google提出了MapReduce(映射化简)技术,它是一种面向大规模数据分析处理和并行计算的编程模型。HBase(Hadoop Database)是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,HBase可以作为MapReduce的数据来源和数据目的地,从而使得MapReduce能够处理HBase中保存的数据或者将输出数据保存在HBase中。当HBase作为MapReduce的数据目的地时,可采用HBase中自带的数据导入工具,但是由于HBase中自带的数据导入工具有一定的局限性,它不能使用户完全控制数据加载过程,并且不能自定义数据加载的预期格式。因此,加载具有特定格式的HBase加载数据的导入方法是非常重要的。目前批量加载数据到HBase数据库最高效的方式如CN20131058470.2公开的一种HBase加载数据的导入方法,其首先根据实际数据对HBase表的Region(分区)进行预分,然后编写MapReduce程序将源数据转换为HFile文件,每个Region对应一个HFile文件,最后利用completebulkload命令将HFile文件加载到HBase。上述方法可以将生成好的HFile文件直接加载进运行中的HBase集群,减少了在数据迁移过程中数据传输的网络流量,提高了数据导入效率,节省CPU和网络资源。但上述方法存在以下三点不足之处:首先,HBase表创建时默认只有一个Region,数据加载时首先进入此Region,当数据量达到一个阈值时会被分裂成两个Region,分裂的Region会分布到其他的RegionServer,以保证集群的负载均衡,但是Region的分裂是一个耗时的过程,会导致数据加载时的效率低下。其次,通过MapReduce生成HFile文件,由于HFile文件必须是按字典序排列的,
因此必须首先通过Map(映射)过程将所有数据写到临时文件,然后在Reduce(化简)过程从临时文件读取数据进行排序,生成HFile文件,此过程非常耗时。再者,通过MapReduce生成HFile文件的过程中,如果Map阶段任务失败,生成的临时文件会被删除,数据加载需要重新开始;如果Reduce阶段任务失败,生成的HFile文件会被删除,数据加载仍需要重新开始。
技术实现思路
鉴于现有技术的上述缺陷,本专利技术提供了一种基于HFile批量加载数据的方法,以进一步提高数据加载的效率。本专利技术采用的技术手段如下:一种基于HFile批量加载数据的方法,包括:预分分区Region,形成与HFile文件一一对应的多个分区Region;读取源数据记录,分别确定每一条源数据记录需写入的HFile文件,并将源数据记录写入其对应的HFile文件;对已完成源数据记录写入的HFile文件加载至其对应的分区Region。进一步,读取源数据记录,分别确定每一条源数据记录需写入的HFile文件,并将源数据记录写入其对应的HFile文件包括:读取源数据记录,分别确定每一条源数据记录对应的HFile文件的文件名;根据所述文件名将源数据记录向各自对应的多个HFile文件写入。进一步,将源数据记录写入其对应的HFile文件后,将所述HFile文件存储到自定义目录。进一步,预分分区Region,形成与HFile文件一一对应的多个分区Region包括:预分分区Region,形成行主键RowKey自增的多个分区Region。进一步,所述预分分区Region,形成行主键RowKey自增的多个分区Region包括:根据源数据的总数据量确定预分分区Region个数及大小;采用源数据中自增的ID作为分区Region的行主键RowKey。进一步,读取源数据记录,分别确定每一条源数据记录对应的HFile文件的文件名包括:在map的setup方法中获取所有分区Region的起始键值StartKey和终止键值EndKey,生成起始键值StartKey和终止键值EndKey集合,并定义endKey变量;读取一条源数据记录后,判断endKey变量的值是否为空;若判断结果为endKey变量的值为空,则判断当前读取的源数据记录中的所述自增
的ID是否在某个Region的起始键值StartKey和终止键值EndKey之间,如果当前读取的源数据记录中的所述自增的ID处于某个Region的起始键值StartKey和终止键值EndKey之间,则将当前读取的源数据记录中的endKey变量赋值为该Region的终止键值EndKey,并判断当前读取的源数据记录中的所述自增的ID是否等于endKey变量的值;若当前读取的源数据记录中的所述自增的ID等于endKey变量的值,则说明当前读取的源数据记录已不属于该Region而属于该Region的下一个Region,将endKey赋值更新为该Region的下一个Region的EndKey,由此获得与该Region的下一个Region对应的HFile文件的文件名。进一步,若判断结果为endKey变量的值不为空,则判断当前读取的源数据记录中的所述自增的ID是否等于endKey变量的值;当前读取的源数据记录中的所述自增的ID不等于endKey变量的值,则说明当前读取的源数据记录属于该Region,由此获得与该Region对应的HFile文件的文件名。进一步,在获得HFile的文件名后,对当前读取的源数据记录中的KeyValue进行排序。进一步,所述对当前读取的源数据记录中的KeyValue进行排序包括:定义一个KeyValue的排序集合;将当前读取的源数据记录中的KeyValue存放到所述排序集合中完成排序。进一步,将该条源数据记录写入其对应的HFile文件包括:调用map方法中的write方法,添加所述HFile的文件名;利用write方法解析HFile的文件名;判断该HFile的文件名对应的文件对象是否存在,若该HFile的文件名对应的文件对象不存在则根据该HFile的文件名创建文件对象,并将当前读取的源数据记录写入文件对象;若该HFile的文件名对应的文件对象存在,则直接当前读取的源数据记录写入文件对象。进一步,调用map方法中的write方法,添加所述HFile的文件名包括:在FileOutputFormat类中根据键值对的规则定义名称为recordWriters,类型为HashMap<String,RecordWriter<K,V>>的变量;其中,recordWriters的key的类型为字符串String,表示输出的文件名;recordWriters的value的类型为RecordWriter<K,V>,表示记录的输出对象;所述调用write方法为调用context.write(key,value)方法,将该条源数据记录对应的
文件名添加到key的末尾。进一步,所述判断该HFile的文件名对应的源数本文档来自技高网
...

【技术保护点】
一种基于HFile批量加载数据的方法,其特征在于,包括:预分分区Region,形成与HFile文件一一对应的多个分区Region;读取源数据记录,分别确定每一条源数据记录需写入的HFile文件,并将源数据记录写入其对应的HFile文件;对已完成源数据记录写入的HFile文件加载至其对应的分区Region。

【技术特征摘要】
1.一种基于HFile批量加载数据的方法,其特征在于,包括:预分分区Region,形成与HFile文件一一对应的多个分区Region;读取源数据记录,分别确定每一条源数据记录需写入的HFile文件,并将源数据记录写入其对应的HFile文件;对已完成源数据记录写入的HFile文件加载至其对应的分区Region。2.根据权利要求1所述的方法,其特征在于,读取源数据记录,分别确定每一条源数据记录需写入的HFile文件,并将源数据记录写入其对应的HFile文件包括:读取源数据记录,分别确定每一条源数据记录对应的HFile文件的文件名;根据所述文件名将源数据记录向各自对应的HFile文件写入。3.根据权利要求2所述的方法,其特征在于,将源数据记录写入其对应的HFile文件后,将所述HFile文件存储到自定义目录。4.根据权利要求3所述的方法,其特征在于,预分分区Region,形成与HFile文件一一对应的多个分区Region包括:预分分区Region,形成行主键RowKey自增的多个分区Region。5.根据权利要求4所述的方法,其特征在于,所述预分分区Region,形成行主键RowKey自增的多个分区Region包括:根据源数据的总数据量确定预分分区Region个数及大小;采用源数据中自增的ID作为分区Region的行主键RowKey。6.根据权利要求5所述的方法,其特征在于,读取源数据记录,分别确定每一条源数据记录对应的HFile文件的文件名包括:在map的setup方法中获取所有分区Region的起始键值StartKey和终止键值EndKey,生成起始键值StartKey和终止键值EndKey集合,并定义endKey变量;读取一条源数据记录后,判断endKey变量的值是否为空;若判断结果为endKey变量的值为空,则判断当前读取的源数据记录中的所述自增的ID是否在某个Region的起始键值StartKey和终止键值EndKey之间,如果当前读取的源数据记录中的所述自增的ID处于某个Region的起始键值StartKey和终止键值EndKey之间,则将当前读取的源数据记录中的endKey变量赋值为该Region的终止键值EndKey,并判断当前读取的源数据记录中的所述自增的ID是否等于endKey变量的值;若当前读取的源数据记录中的所述自增的ID等于endKey变量的值,则说明当前
\t读取的源数据记录已不属于该Region而属于该Region的下一个Region,将endKey赋值更新为该Region的下一个Region的EndKey,由此获得与该Region的下一个Region对应的HFile文件的文件名。7.根据权利要求6所述的方法,其特征在于,若判断结果为endKey变量的值不为空,则判断当前读取的源数据记录中的所述自增的ID是否等于endKey变量的值...

【专利技术属性】
技术研发人员:谢忠贤浦世亮周明耀
申请(专利权)人:杭州海康威视数字技术股份有限公司
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1