人、机、物三元世界的高度融合引发了数据规模的爆炸式增长和数据模式的高度复杂化,世界已进入网络化的大数据时代,大数据查询技术备受关注并且得到广泛研究。
大数据查询技术是大数据管理的核心技术之一,伴随着云计算技术以及 NoSQL(Not Only SQL) 数据库技术的发展,针对大数据查询已经产生了许多新型的查询技术。目前,关于大数据的查询技术都是完整查询,即无论如何定义查询条件匹配算法(近似或精确) ,无论如何对查询结果集排序,查询都将确定地返回所有匹配数据,查询所需的时间代价较大。 然而,在大数据环境下,很多实际应用表明,人们并不需要确定完整的查询结果,也不需要对结果精确排序(如 Top—k查询 ) ,仅需要满足一定完整性要求的部分查询结果,或可以适当地损失查询完整性来满足性能要求。 例如,在智能终端迅速普及和高速发展的现代社会,人们在出行过程中更多地通过移动设备来查询附近的酒店、景点等,由于移动设备网络速度的限制以及完整查询较高的时间代价,对于给定的查询条件,返回全部查询结果需要消耗较高的时间代价,然而,人们并不需要返回的结果集是全部数据,相反对响应时间的要求会更高 ,可通过减少数据传输量以及优化查询技术来满足此需求。
这里介绍两种查询系统,一种是基于hadoop模式的数据查询系统,另一种是基于概率的数据查询系统。
Hadoop是分布式集群系统架构,它具有高可用性、高容错性和高可扩展性等优点,用户可以在完全不了解底层实现细节的情形下,开发适合自身应用的分布式程序。Hadoop由HDFS、MapReduce、HBase、Hive和ZooKeeper等成员组成,其中最基础最重要的两种组成元素为底层用于存储集群中所有存储节点文件的文件系统HDFS(Hadoop Distributed File System)和上层用来执行MapReduce程序的引擎。
HDFS( Hadoop Distributed File System),是一个分布式文件系统。它具有高容错性的特点,以流式访问模式访问应用程序的数据,这大大提高了整个系统的数据吞吐量,因而非常适合用于具有超大数据集的应用程序中。MapReduce是最初被Google用来创建和更新索引,但现在MapReduce常用于大规模数据集(大于1TB)的并行运算,在Hadoop中以组件的形式进行实现的。Hadoop系统平台中的MapReduce模型可以被视为一种RDBMS(Relation DataBase Manage System,关系型数据库管理系统)的补充。
本系统基于Hadoop平台,采用HBase数据库存储海量交易记录,整体架构按照数据的流向划分,系统可以分为四层,分别是:数据源、数据接入层、存储层和查询层。
数据接入层设计
由于数据源包括多种类型,因此,在进行数据接入层设计的时候,一是要对数据源隐藏数据接入层对HBas数据库操作的细节,为不同类型数据源的数据导入提供一个统一的接口。在数据接入层中要保存HBase数据库集群的地址、服务端口、ZooKeeper集群的地址等信息;要完成与HBase集群的连接。最终,只需调用数据接入层提供的简单接口就可以从数据源中将数据导入HBase数据库,同时,还要考虑到不同的数据导入方式,对接口进行优化以提高记录导入效率。
存储层设计
该层的实现是由Hadoop平台实现。存储数据库选用Hadoop组件中的HBase数据库。该层主要是负责存储整个系统的底层结构化数据。通常,在传统关系数据库的表设计中,通常以编号(唯一标识一条记录)为主键、以各个属性为列,创建表。而Hbase是一个稀疏的,排序的,长期存储在硬盘上的,多维度的,映射表。这张表的索引是行关键字,列关键字和时间戳。每个值是一个不解释的字符数组,数据都是字符串。用户在表格中存储数据,每一行都有一个可排序的主键和任意多的列。由于是稀疏存储的,所以同一张表的每一行数据都可以有截然不同的列。列名字的格式是“:”,都是由字符串组成,每一张表有一个family集合,这个集合是固定不变的,相当于表的结构,只能通过改变表结构来改变。但是label值相对于每一行来说都是可以改变的。
HBase中表的各列都属于某个 Column Family,通过对 HBase 数据库系统的研究和测试表明,HBase目前不能良好的处理包含多个Column Family 的表,这是因为当表中的某个 Column Family触发 flush刷新操作时,与这个 Column Family 相邻的 Column Family 也会因关联效应而触发flush刷新操作,从而导致系统中产生大量的I/O,降低了整个系统的性能。
时间同步设计
Hadoop 是部署在大规模分布式环境中的,由于集群中的机器配置和状态各异,导致每一台机器上的时间可能不同,例如,某一台机器上的时间比另外一台快几分钟甚至几小时。在大规模的实际应用场景中,集群中节点时间不同步的现象是一直存在的。因此,在集群中需要通过网络时间同步协议(Network Time Protocol,NTP)自动同步节点时间。在集群中的节点上安装并启动时间同步服务,使各节点自动同步自己的时钟。
Map/Reduce设计
在系统中,数据首先会输入到GFS上,然后把输入的数据进行分区,把从数据源导入的数据分割成M个大小均为6M-64M的块送入Cluster,分布到不同的机器上并行执行。在集群节点上首先选择一个核心节点作为主控制程序master,master控制任务的分配,总共有M个map任务和R个reduce任务需要分配。Master会选择空闲的worker来分配map任务和reduce任务。用户数据输入后,会分配一个map任务给worker,worker读取并处理相关的文件块。Worker读取块后会处理数据,分析出key/value然后传递给用户定义的map函数。Map函数将中间结果暂时存放在缓冲的内存中。Map worker执行结束后,它把数据处理的地址通知到主控制器master,master更新自身的数据结构,并且负责把这些信息告知Reduce worker。Master的工作流程好比报刊的订阅/发行业务流,每当master的缓冲文件的位置信息的结构更新时,他就告诉所有的正在运行状态的Reduce worker。Recude worker会迭代所有的排序后的中间数据集合,并且把key和相关的中间结果值集合传递给用户定义的reduce函数。Reduce函数会将内容输出到一个最终的文件中。
容错设计
对于worker来说,由于Master维护同一个任务下所有Map worker和Reduce work的状态信息,进行周期性的更新,如果发现有不回应的,Master就猜测该worker所在节点可能出现故障,对于Map worker(即使它完成了),它会另外找一台机器在上面启一个新的worker重新执行失效worker的任务,而对于Reduce worker,如果完成了的话,就不需要重新执行,负责需要和Map 一样处理。重新执行Map时,Master会将新的Map worker信息告知Reduce。对于Master来说,一般采用两种方式容错,一是就是有多个master实例,备份的master实例是inactive状态,但是保持数据结构和工作中的master一致。一旦工作中的master宕机,马上替换掉。二是间隔一段时间会将整个数据结构持久化到全局文件系统中(类似于写日志),宕机后,就从上一个checkpoint重新开始启动master进程。
查询层设计
查询层为用户提供同系统进行交互的界面,主要包括三个模块,分别是用户登陆模块、用户注册模块、数据查询模块。用户登陆模块用于用户的登陆,只有当用户输入了正确的用户名和密码才能进入查询模块,进行数据的查询操作;用户注册模块提供用户的注册功能;数据查询模块的功能是进行交易记录的查询,查询模块包括查询界面,数据分析解析模块和查询结果处理模块等。
这里介绍大数据环境下的概率查询系统——Probery。
Probery 是基于Hadoop分布式文件系统(Hadoop Distributed File System, HDFS)和MapReduce 编程模型设计的一种大数据概率查询系统。 Probery采用了一种基于概率的近似完整性查询技术,其近似性主要体现在数据查全的可能性上,即查询到满足查询条件的所有数据的概率,本研究将其称之为查全概率(Recall Probability )。查全概率的定义和传统的近似查询以及模糊查询不同,它不度量结果与查询条件的匹配程度,也不度量结果集大小 ,而度量结果集是完整数据集的可能性。查全概率很小的结果集也可能是完整的,也可能包含大部分结果;查全概率大的查询并不一定比查全概率小的查询包含更多结果。 Probery 通过降低查全的可能性来换取性能,并且通过概率计算来保证查询结果的查全概率。
Probery 是基于概率的大数据查询系统,系统根据给定的查全概率查询满足查询条件的数据。为了实现大数据的分布式存储和高效查询,Probery 基于 Hadoop 平台来对系统进行架构,通过将数据按概率划分为多个文件并存储在分布式文件系统上,以缩小数据的查询范围,且保证查询的并行性;同时也使得系统具有较强的容错能力和水平伸缩性。Probery系统架构共包括 Hadoop Cluster、Data Placer、Data Querist、Job Node 和 Service Facade 这5个系统组件 。
Data Placer
Data Placer 主要负责数据的装载工作,Data Placer将来自Data Source 的数据按照概率分布函数装载到 Hadoop Cluster 中,并记录数据的放置次数, 以求解数据的存在概率,存在概率是 Probery 进行概率查询的元数据 (Meta Data) ,在完成数据的装载工作后,Data Placer 将元数据传递给 Data Querist,并由其进行管理和维护。
Data Querist
Data Querist 主要负责数据的概率查询,是系统的核心组件。 Data Querist接收来自Job Node 的数据查询请求,按照查询要求返回满足查询条件的数据的位置分布信息(Distribution Info) 。
Job Node
Job Node 负责查询作业的管理工作,Job Node 接收来自Service Facade 的查询请求,包括查询属性集以及 查全概率(Query Attribute & RecallRatio) ,通过Data Querist 得到需要查询数据的位置信息,依此生成MapReduce 作业(MapReduce Job ) ,将作业递交给 Hadoop Cluster 处理 ,当 Hadoop Cluster 完成作业的处理工作后,Job Node 接收来自Hadoop Cluster 的作业状态汇报,如果作业处理成功,则将查询报告传递给 Service Facade, 通知Service Facade 去获取作业结果,如果作业运行失败,则会重新提交作业。
Hadoop Cluster
Hadoop Cluster将 Hadoop 框架搭建在一个可扩展的分布式节点上,主要负责数据的分布式存储以及并行化查询,其中,通过 HDFS 来实现数据的分布式存储,通过 MapReduce 来实现数据的并行查询。 当 Job Node提交一个 MapReduce 查询作业 (MapReduce Job) 时,Hadoop Cluster 根据作业要求完成作业的处理工作,将作业结果保存在 HDFS上,将作业状态汇报 (Job Report) 给 Job Node,然后等待 Service Facade 来读取作业结果。
Service Facade
Service Facade 负责将接收来自Client端的数据查询请求(Query Command) ,对查询请求进行格式的检查与转换,如果查询请求合理并转换成功,则将转换后的查询请求提交给 Job Node 处理。 此外,Service Facade接收到来自Job Node 的作业完成通知,到 Hadoop Cluster获取作业的查询结果 (Request Result) ,并将查询结果返回给Client。