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

文档序号:8457281阅读:598来源:国知局
基于HBase的数据导入方法和系统的制作方法
【专利说明】
【技术领域】
[0001]本发明涉及大数据处理技术,特别涉及基于HBase的数据导入方法和系统。
【【背景技术】】
[0002]随着移动互联网技术的高速发展,尤其是智能移动终端的广泛普及,互联网相关企业的业务数据量呈现爆发式的增长。如何快速有效地处理这些数据,将其转化为有价值的信息,是亟需解决的问题。HBase (Hadoop Database)作为一个构建在HDFS (HadoopDistributed File System, Hadoop分布式文件系统)上,具有高可靠性、高性能、面向列、可伸缩等优秀特性的分布式存储系统,为数据的存储和处理提供了经济、高效、安全和可靠的保障,逐渐成为饱受海量数据困扰的企业存储数据首选的解决方案。
[0003]有多种方法可以将数据加载到HBase的数据表中,比如通过MapReduce (—种用于大规模数据集的并行运算)调用TableOutputFormat (将MapReduce的输出导入到HBase的一种方法)方法,或者将数据以HBase内部的组织格式输出成文件加载到集群中,这些方法都需要启动MapReduce,有一定的时间延迟,不能满足对进行数据快速存储的要求。

【发明内容】

[0004]基于此,有必要提供一种可提高数据导入速度的基于HBase的数据导入方法。
[0005]一种基于HBase的数据导入方法,包括以下步骤:
[0006]文件名提取线程提取文件压缩池中新上报文件的文件名,将提取的文件名存放到无读写锁的队列;
[0007]文件处理线程从无读写锁的队列中获取文件名,从所述文件压缩池中提取文件名对应的文件,读取文件为文件流;
[0008]文件处理线程将文件流中的行数据转换为json对象;
[0009]文件处理线程根据json对象构造HBase的Row对象;
[0010]存储线程将构造的Row对象导入HBase中。
[0011]在其中一个实施例中,根据json对象构造HBase的Row对象的步骤包括:
[0012]根据json对象构造Row对象的行键;
[0013]将构造的行键作为Row对象的主键初始化Row对象;
[0014]根据j son对象构造初始化成功的Row对象的键值对。
[0015]在其中一个实施例中,所述根据json对象构造Row对象的行键的步骤包括:从行键构造规则配置文件中读取json对象中的表名对应的行键构造规则;根据读取的行键构造规则以及json对象中的键值对构造Row对象的行键;
[0016]根据json对象构造初始化成功的Row对象的键值对的步骤包括:根据json对象中的表名查找对应的列类型配置文件;将json对象中的列值转换成其对应列名在列类型配置文件中对应的列类型的值;将经过类型转换的列值转化成字节数组;将列名与对应的列值构成键值对保存到初始化成功的Row对象中。
[0017]在其中一个实施例中,在所述根据json对象构造HBase的Row对象的步骤之后,所述方法还包括:文件处理线程将构造的Row对象保存到缓存池;
[0018]所述存储线程将构造的Row对象导入HBase中的步骤包括:存储线程监听缓存池数据量大小,当缓存池数据量大小达到阈值时,将缓存池中的Row对象导入HBase中,重置缓存池。
[0019]在其中一个实施例中,所述方法还包括步骤:
[0020]验证线程校验HBase返回的写入结果,若发生写入错误,则记录错误发生的行数据、行数据所在文件的文件名及行数据在文件中的行号。
[0021]此外,还有必要提供一种可提高数据导入速度的基于HBase的数据导入系统。
[0022]一种基于HBase的数据导入系统,包括以下步骤:
[0023]文件名提取模块,用于提取文件压缩池中新上报文件的文件名,将提取的文件名存放到无读写锁的队列;
[0024]文件读取模块,用于从队列中获取文件名,从所述文件压缩池中提取文件名对应的文件,读取文件为文件流;
[0025]json对象转换模块,用于将文件流中的行数据转换为json对象;
[0026]Row对象构造模块,用于根据json对象构造HBase的Row对象;
[0027]数据导入模块,用于将构造的Row对象导入HBase中;
[0028]控制模块,用于启动文件名提取线程执行文件名提取模块,启动文件处理线程执行文件读取模块、json对象转换模块和Row对象构造模块,以及启动存储线程执行数据导入模块。
[0029]在其中个实施例中,所述Row对象构造|旲块包括:
[0030]行键构造模块,用于根据json对象构造Row对象的行键;
[0031 ] Row对象初始化模块,用于将构造的行键作为Row对象的主键初始化Row对象;
[0032]键值对构造模块,用于根据json对象构造初始化成功的Row对象的键值对。
[0033]在其中一个实施例中,所述行键构造模块包括:
[0034]规则读取单元,用于从行键构造规则配置文件中读取json对象中的表名对应的打键构造规则;
[0035]行键构造单元,根据读取的行键构造规则以及json对象中的键值对构造Row对象的行键;
[0036]所述键值对构造模块包括:
[0037]配置文件查找单元,用于根据json对象中的表名查找对应的列类型配置文件;
[0038]列值转换单元,用于将json对象中的列值转换成其对应列名在列类型配置文件中对应的列类型的值;
[0039]数组生成单元,用于将经过类型转换的列值转化成字节数组;
[0040]键值对保存单元,用于将列名与对应的列值构成键值对保存到初始化成功的Row对象中。
[0041]在其中一个实施例中,所述系统还包括数据缓存模块,用于在根据json对象构造HBase的Row对象之后,将构造的Row对象保存到缓存池;
[0042]所述控制模块还用于启动所述文件处理线程执行数据缓存模块;
[0043]所述数据导入模块用于监听缓存池数据量大小,当缓存池数据量大小达到阈值时,将缓存池中的Row对象导入HBase中,重置缓存池。
[0044]在其中一个实施例中,所述系统还包括验证模块,用于校验HBase返回的写入结果,若发生写入错误,则记录错误发生的行数据、行数据所在文件的文件名及行数据在文件中的行号;
[0045]所述控制模块还用于启动验证线程执行验证模块。
[0046]上述基于HBase的数据导入方法和系统,文件名提取线程提取文件压缩池中新上报文件的文件名,将提取的文件名存放到无读写锁的队列,文件处理线程从无读写锁的队列中获取文件名,并从文件压缩池中提取文件名对应的文件,读取文件为文件流;由于队列无读写锁,文件名提取线程将文件名存放到队列中时无需加写锁、解写锁,文件处理线程从无读写锁的队列中获取文件名时,无需加读锁、解读锁,而且文件名提取线程与文件处理线程可并发地从队列中读写数据,从而提高了读写数据的速度。进一步的,文件处理线程将文件流中的行数据转换为json对象,并根据json对象构造HBase的Row对象;存储线程将构造的Row对象导入HBase中,文件处理线程与存储线程可并发地进行工作,两个线程之间互不影响工作进度。因而,上述基于HBase的数据导入方法和系统,通过无读写锁队列以及多线程并发处理机制,可提高将数据导入HBase的速度。
【【附图说明】】
[0047]图1为一个实施例中的基于HBase的数据导入方法的流程示意图;
[0048]图2为一个实施例中根据json对象构造HBase的Row对象的步骤的流程示意图;
[0049]图3为一个实施例中的Row对象缓存示意图;
[0050]图4为一个实施例中的基于HBase的数据导入方法的流程示意图;
[0051]图5为一个实施例中的基于HBase的数据导入系统结构示意图;
[0052]图6为一个实施例中Row对象构造模块的结构示意图;
[0053]图7为另一实施例中的基于HBase的数据导入系统结构不意图;
[0054]图8为又一实施例中的基于HBase的数据导入系统结构不意图。
【【具体实施方式】】
[0055]如图1所示,在一个实施例中,一种基于HBase的数据导入方法,包括以下步骤:
[0056]步骤S102,文件名提取线程提取文件压缩池中新上报文件的文件名,将提取的文件名存放到无读写锁的队列。
[0057]文件压缩池为文件存储空间。无读写锁的队列为读写队列中数据不需要加解读写锁的队列;无读写锁的队列可保证线程安全,线程安全指的是在多个线程并发读写队列中数据时不出现错误。
[0058]在一个实施例中,可由日志中心等文件产生方上报文件到文件压缩池。文件名提取线程可实时监测文件压缩池中是否有新上报的文件,当文件压缩池中有新上报的文件时,提取新上报文件的文件名。
[0059]步骤S104,文件处理线程从无读写锁的队列中获取文件名,从文件压缩池中提取文件名对应的文件,读取文件为文件流。
[0060]文件处理线程可循环执行步骤S104、S106和S108。
[0061]在一个实施例中,在读取文件为文件流的步骤之前,上述基于HBas
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1