法律状态公告日
法律状态信息
法律状态
2017-10-13
授权
授权
2014-11-12
实质审查的生效 IPC(主分类):G06F17/30 申请日:20140707
实质审查的生效
2014-10-15
公开
公开
技术领域
本发明涉及计算机存储技术领域,具体涉一种基于hive的历史数据存档 与查询方法。
背景技术
大数据(big data),或称巨量资料,指的是所涉及的资料规模巨大到无 法透过目前主流软件工具,在合理时间内达到撷取、管理、处理、并整理成 为帮助企业经营决策更积极目的的资讯。近年大数据技术在互联网上的应用 逐渐成熟,在不知不觉中已开始改变我们的生活。同时大数据技术的应用范 围也开始向其它行业扩充,当然这也带来新的技术问题。
Hadoop Distributed File System(HDFS)被设计成适合运行在通用硬 件(commodity hardware)上的分布式文件系统。HDFS是一个高度容错性的系 统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合 大规模数据集上的应用。
thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结 合了功能强大的软件堆栈和代码生成引擎,以构建在C++,Java,Python, PHP,Ruby,Erlang,Perl,Haskell,C#,Cocoa,JavaScript,Node.js, Smalltalk,and OCaml这些编程语言间无缝结合的、高效的服务。
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射 为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为 MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速 实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数 据仓库的统计分析。并且它仍然利用HDFS文件系统作为底层文件存储系统, 这就保证了存储系统的稳定性和易扩展性。
随着金融、电信、能源等传统产业在运营、管理过程中产生的数据量逐 年增多,这些数据的大小超出了典型数据库软件工具收集、存储、管理和分 析的能力,大数据技术在传统产业中的应用也提到了日程。特别是金融行业 亟需一种高效、安全的方法存储他们日益增加的交易和管理数据。
发明内容
为了解决上述技术问题,本发明提出一种基于hive的历史数据存档与查 询方法,包括:
1)建立hive表,并在hive表中建立分区;
2)使用ETL工具从其它数据库中导出源数据,将源数据作为文件中的记 录保存在文件中,即从其他数据库中导出的一条源数据对应于文件中的 一条记录;
3)对文件中的记录进行验证;
4)通过验证后,将文件中的记录导入临时表,再将临时表中的数据插入 有分区结构的hive表;
5)基于Thrift接口从hive表中查询历史数据。
特别地,所述步骤2)还包括:文件中的记录的每列采用‘|+|’进行分 隔,记录的每行之间采用‘|-|’标记结尾,并跟上回车符;上述‘|+|’称 为分隔符,‘|-|’称为分行符。
特别地,所述步骤3)中所述验证过程具体为:根据步骤1)中建立的hive 表的列数信息统计文件中记录的列数信息是否正确,并且验证所述分隔符和 分行符是否无误。
特别地,所述步骤4)中所述将临时表中的数据插入有分区结构的hive 表之前还包括去除所述分行符的步骤。
特别地,所述步骤4)中所述将临时表中的数据插入有分区结构的hive 表包括:使用java调用shell脚本,在脚本中采用add jar语句将更改后 的hive jar包导入hive中。
特别地,所述步骤5)中基于Thrift接口执行历史数据查询,具体为: 客户端将查询请求翻译成thrift格式的命令,通过hive server2连接方式 将所述thrift格式的命令发送到服务器,所述服务器将所述thrift格式的 命令翻译成服务器可以识别的命令格式并执行,返回查询数据。
本发明提出的方法,能够向其它软件提供接口,并完成定制化历史数据 导入和数据查询的功能。
附图说明
图1为本发明提出的一种基于hive的历史数据存档与查询方法流程图。
图2为本发明提出的hive server2运行原理示意图。
具体实施方式
下面参照附图1,描述实现本发明一个实施例提出的方法,步骤如下:
(一)数据导入存储方法
包含如下三个步骤:(1)建立hive表;(2)检验ETL导出数据的正确性; (3)数据导入。本技术大部分的功能使用脚本语言实现,整体代码有着方便、 简洁的特点。
1)建立hive表
为了使代码更加简便,并且有很好的交互性,在本发明中建表和数据导 入使用java调用脚本的方式完成,用户可以使用java接口调用相应的脚本 来定制构建表结构。这种建表方式使得开发人员在hive之上完成功能开发, 而不需要对hive有很深的专业知识。
2)使用ETL导出数据并检查正确性
使用ETL工具从其它数据库中导出源数据,将源数据作为文件中的记录 保存在文件中,即从其他数据库中导出的一条源数据对应于文件中的一条记 录,导出文件名为表名加日期的格式,而文件中的记录采用变长记录格式, 即记录的每列采用‘|+|’进行分隔,而每行之间采用‘|-|’标记结尾,并 跟上回车符;上述‘|+|’称为分隔符,‘|-|’称为分行符。
在此步骤中需要对文件中的记录进行验证,所述验证过程为:首先根据 上一步的建立hive表的列数信息统计文件中列数是否正确,并且验证分隔符 和分行符是否无误。
3)数据导入
由于hive不支持多字节的分行符,所以在将文件中的记录数据导入hive 表前,需将文件中的分行符去除,这一功能是由java完成。
金融数据中存储着大量特殊符号,所以该类数据的分隔符最好选用复杂 的多分隔符以便和金融数据中的特殊字符区分,但是hive thrift并不支持 多分隔符的数据导入,代码中使用java调用shell脚本的方式解决该问题, java首先调用shell脚本,在脚本中采用add jar语句将更改后的hive jar 包导入hive中,使得hive thrift支持多分隔符的数据导入。
历史数据的查询中最重要的是围绕日期的查询,所以本发明公开的实施 例提出的方法采用了分区的格式以提高基于日期的查询速度。向分区表中导 入数据需要首先创建临时表,并将数据导入临时表中;然后通过insert语句 将临时表中的数据插入第1)步中建立的hive表。
(二)数据查询方法
针对hive jdbc接口数据传输较慢的缺点,本发明实施例提出的数据查 询方法使用了Thrift接口,但是与thrift对应的hive服务器(hive sever) 极其不稳定,经常会莫名奇妙假死,导致客户端(client)所有的连接都被阻 塞(block)。为解决这一技术问题,本发明公开的实施例提出使用hive server2连接方式,所述hive server2连接方式是大数据平台工具hive开 启的服务,该服务负责响应符合thrift框架的查询请求,图2是hive server2 运行原理,客户端将查询请求翻译成thrift格式的命令,服务器端将thrift 格式的命令翻译为服务器可以识别的命令格式,并运行该命令,返回查询数 据。使用hive server2连接方式能够达到更好的连接稳定性。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本 领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和 原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护 范围之内。
机译: 通过锁定和半扩展DB HIVE机架到LR HIVE,获得DB 10 HIVE类型,锁到馈送器的HIVE盖
机译: 区块链块数据存档方法和装置,查询方法和装置
机译: 区块链块数据存档方法,装置,查询方法及装置