基于HBase的数据导入方法和系统的制作方法_4

文档序号:8457281阅读:来源:国知局
。采用分表配置文件保存配置的分表规则,自动根据分表规则计算分表名,可使上述基于HBase的数据导入系统的通用性得到增强。
[0144]进一步的,数据缓存模块60可在缓存池中查找Row对象的分表名对应的列表,若未查找到,则建立分表名对应的列表;进一步的,将Row对象添加到其分表名对应的列表中。
[0145]本实施中,数据导入模块50可存储线程监听缓存池数据量大小,当缓存池数据量大小达到阈值时,将缓存池中的Row对象导入HBase中,重置缓存池。
[0146]具体的,数据导入模块50可获取缓存池中的所有分表名,对应每个分表名实例化一个HTable对象,将缓存池中各分表名对应的Row对象列表通过无锁机制批量导入HBase中分表名对应的HTable对象。无锁机制可保证多线程快速存储数据的要求。进一步的,HBase可将导入的数据写入其缓冲区memstore ;当缓冲区数据量达到阈值后,将缓冲区数据写入HFile文件;而当HFile文件数量达到预设数量时,将HFile文件合并成一个大的HFile文件;进一步的,返回写入结果。
[0147]本实施例将构造的Row对象保存到缓存池中,当缓存池数据量大小达到阈值时,将缓存池中的Row对象导入HBase中,可减少与HBase进行RPC通讯的次数,从而提高整体的数据导入速度。
[0148]如图8所示,在一个实施例中,上述基于HBase的数据导入系统还包括验证模块70。控制模块80还用于启动验证线程执行验证模块70。验证模块70用于校验HBase返回的写入结果,若发生写入错误,则记录错误发生的行数据、行数据所在文件的文件名及行数据在文件中的行号。
[0149]本实施例采用验证线程校验HBase返回的写入结果,验证线程可与其它线程并发工作,从而提高处理速度;另外,本实施例还记录错误发生的行数据、行数据所在文件的文件名及行数据在文件中的行号,数据准确度精确到行,从而提高了数据存储的精确度。
[0150]上述基于HBase的数据导入方法和系统,文件名提取线程提取文件压缩池中新上报文件的文件名,将提取的文件名存放到无读写锁的队列,文件处理线程从无读写锁的队列中获取文件名,并从文件压缩池中提取文件名对应的文件,读取文件为文件流;由于队列无读写锁,文件名提取线程将文件名存放到队列中时无需加写锁、解写锁,文件处理线程从无读写锁的队列中获取文件名时,无需加读锁、解读锁,而且文件名提取线程与文件处理线程可并发地从队列中读写数据,从而提高了读写数据的速度。进一步的,文件处理线程将文件流中的行数据转换为json对象,并根据json对象构造HBase的Row对象;存储线程将构造的Row对象导入HBase中,文件处理线程与存储线程可并发地进行工作,两个线程之间互不影响工作进度。因而,上述基于HBase的数据导入方法和系统,通过无读写锁队列以及多线程并发处理机制,可提高将数据导入HBase的速度。
[0151]本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序控制相关的硬件来完成的,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory, ROM)或随机存储记忆体(Random AccessMemory, RAM)等。
[0152]以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
【主权项】
1.一种基于HBase的数据导入方法,包括以下步骤: 文件名提取线程提取文件压缩池中新上报文件的文件名,将提取的文件名存放到无读写锁的队列; 文件处理线程从无读写锁的队列中获取文件名,从所述文件压缩池中提取文件名对应的文件,读取文件为文件流; 文件处理线程将文件流中的行数据转换为json对象; 文件处理线程根据json对象构造HBase的Row对象; 存储线程将构造的Row对象导入HBase中。
2.根据权利要求1所述的基于HBase的数据导入方法,其特征在于,根据json对象构造HBase的Row对象的步骤包括: 根据json对象构造Row对象的行键; 将构造的行键作为Row对象的主键初始化Row对象; 根据json对象构造初始化成功的Row对象的键值对。
3.根据权利要求2所述的基于HBase的数据导入方法,其特征在于,所述根据json对象构造Row对象的行键的步骤包括:从行键构造规则配置文件中读取json对象中的表名对应的行键构造规则;根据读取的行键构造规则以及json对象中的键值对构造Row对象的行键; 根据json对象构造初始化成功的Row对象的键值对的步骤包括:根据json对象中的表名查找对应的列类型配置文件;将json对象中的列值转换成其对应列名在列类型配置文件中对应的列类型的值;将经过类型转换的列值转化成字节数组;将列名与对应的列值构成键值对保存到初始化成功的Row对象中。
4.根据权利要求1至3其中一项所述的基于HBase的数据导入方法,其特征在于,在所述根据json对象构造HBase的Row对象的步骤之后,所述方法还包括:文件处理线程将构造的Row对象保存到缓存池; 所述存储线程将构造的Row对象导入HBase中的步骤包括:存储线程监听缓存池数据量大小,当缓存池数据量大小达到阈值时,将缓存池中的Row对象导入HBase中,重置缓存池。
5.根据权利要求4所述的基于HBase的数据导入方法,其特征在于,所述方法还包括步骤: 验证线程校验HBase返回的写入结果,若发生写入错误,则记录错误发生的行数据、行数据所在文件的文件名及行数据在文件中的行号。
6.一种基于HBase的数据导入系统,其特征在于,包括以下步骤: 文件名提取模块,用于提取文件压缩池中新上报文件的文件名,将提取的文件名存放到无读写锁的队列; 文件读取模块,用于从队列中获取文件名,从所述文件压缩池中提取文件名对应的文件,读取文件为文件流; json对象转换模块,用于将文件流中的行数据转换为json对象; Row对象构造模块,用于根据json对象构造HBase的Row对象; 数据导入模块,用于将构造的Row对象导入HBase中; 控制模块,用于启动文件名提取线程执行文件名提取模块,启动文件处理线程执行文件读取模块、json对象转换模块和Row对象构造模块,以及启动存储线程执行数据导入模块。
7.根据权利要求6所述的基于HBase的数据导入系统,其特征在于,所述Row对象构造模块包括: 行键构造模块,用于根据json对象构造Row对象的行键; Row对象初始化模块,用于将构造的行键作为Row对象的主键初始化Row对象; 键值对构造模块,用于根据json对象构造初始化成功的Row对象的键值对。
8.根据权利要求7所述的基于HBase的数据导入系统,其特征在于,所述行键构造模块包括: 规则读取单元,用于从行键构造规则配置文件中读取json对象中的表名对应的行键构造规则; 行键构造单元,根据读取的行键构造规则以及json对象中的键值对构造Row对象的行键; 所述键值对构造模块包括: 配置文件查找单元,用于根据json对象中的表名查找对应的列类型配置文件; 列值转换单元,用于将json对象中的列值转换成其对应列名在列类型配置文件中对应的列类型的值; 数组生成单元,用于将经过类型转换的列值转化成字节数组; 键值对保存单元,用于将列名与对应的列值构成键值对保存到初始化成功的Row对象中。
9.根据权利要求6至8其中一项所述的基于HBase的数据导入系统,其特征在于,所述系统还包括数据缓存模块,用于在根据json对象构造HBase的Row对象之后,将构造的Row对象保存到缓存池; 所述控制模块还用于启动所述文件处理线程执行数据缓存模块; 所述数据导入模块用于监听缓存池数据量大小,当缓存池数据量大小达到阈值时,将缓存池中的Row对象导入HBase中,重置缓存池。
10.根据权利要求9所述的基于HBase的数据导入系统,其特征在于,所述系统还包括验证模块,用于校验HBase返回的写入结果,若发生写入错误,则记录错误发生的行数据、行数据所在文件的文件名及行数据在文件中的行号; 所述控制模块还用于启动验证线程执行验证模块。
【专利摘要】一种基于HBase的数据导入方法,包括以下步骤:文件名提取线程提取文件压缩池中新上报文件的文件名,将提取的文件名存放到无读写锁的队列;文件处理线程从无读写锁的队列中获取文件名,从所述文件压缩池中提取文件名对应的文件,读取文件为文件流;文件处理线程将文件流中的行数据转换为json对象;文件处理线程根据json对象构造HBase的Row对象;存储线程将构造的Row对象导入HBase中。上述基于HBase的数据导入方法,通过无读写锁队列以及多线程并发处理机制,可提高将数据导入HBase的速度。此外,还提供一种基于HBase的数据导入系统。
【IPC分类】G06F17-30
【公开号】CN104778182
【申请号】CN201410016490
【发明人】郑壮杰
【申请人】博雅网络游戏开发(深圳)有限公司
【公开日】2015年7月15日
【申请日】2014年1月14日
当前第4页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1