一种访问HDFS分布式存储系统的标准接口的制作方法

文档序号:13910102阅读:153来源:国知局
本发明涉及大数据
技术领域
:,具体来说,涉及一种访问hdfs分布式存储系统的标准接口。
背景技术
::大数据是目前非常热门的一个话题,而大数据的核心是如何存储、分析、挖掘海量的数据来解决实际的问题。如何存储、查询和分析tb/pb级别的数据是在大数据时代不可回避的问题。hdfs文件系统是一个运行在普通的硬件之上的分布式文件系统,提供了一个高度容错性和高吞吐量的海量数据存储解决方案,非常适合大规模数据集上的应用,广泛应用于大数据作为存储系统。因此,对于hdfs分布式存储系统的访问的研究也就是成为研究大数据的一个热点。hdfs作为hadoop的核心组件之一,hadoop系统中的mapreduce组件虽然能够从中取出数据并进行分析计算,但是,mapreduce自身并不是连接存储在hadoop生态系统中的数据的最简单途径,企业需要一种更简单的方式来连接要查询、分析、甚至要执行深度数据分析的数据,以便发掘存储在hadoop中的所有数据的真正价值。显然,直接使用mapreduce无法满足企业快速基于hdfs文件系统进行分析和统计。sql作为数据的操作语言,易于使用,广泛应用于数据分析和挖掘领域,并且具有很长的历史。如果hdfs文件系统能够支持用sql访问,就可以快速实现简单的mapreduce统计,不必开发专门的mapreduce应用,十分适合数据仓库的统计分析。并且还可以快速整合和利用基于sql的数据分析和数据可视化工具的大型生态系统。因此,如何支持用sql访问hdfs文件系统成为研究访问hdfs文件系统的一个重要方向。为了支持用sql访问hdfs文件系统,hadoop上推出了一款可以支持类似sql语言(hiveql,而非标准的sql语言)的组件apachehive,这是一种类似于sql的查询引擎,它将有限的sql语言翻译成mapreduce去hadoop上执行,这样就使得数据开发和分析人员很方便的使用sql来完成海量数据的统计和分析,而不必使用编程语言开发mapreduce那么麻烦。尽管hive对于sql的支持是好的开端,但是它依赖于低效地mapreduce会导致查询出现高延迟,并且对sql的支持也非常有限。因此,精通sql的用户在使用时将遇到严重的限制,并且基于标准sql的庞大的工具生态系统仍然无法直接或少量修改利用hive。数据分析供应商和开源社区采取了各种方法实现sql访问hdfs文件系统。有些供应商已投资优化apachehive来缩小hive与传统sql引擎之间的性能落差,并增强对sql语言的支持。而有些供应商则从头构建分布式sql引擎。比如由cloudera构建的impala,采用类似google开源的dremel的方式,自己实现了一个执行引擎,而不像mapreduce一样是一个通用框架,并且也没有任何failover和highavailability的设计。目前无论采用的各种方案,要不存在对sql的兼容性不够,要不就是执行的效率不高,要不就是高额的成本,无法很好地满足用户的需要。因此,本发明公开了一种基于传统分布式关系数据库的查询优化框架,底层存储支持hdfs文件系统的方案。它能完全兼容sql的标准,符合tpc-ds规格,高效地处理各种查询和分析,很好地跟传统基于关系型数据库的数据分析和数据可视化工具整合。以下为本方案中可能会涉及的部分专业术语:hadoop:是一个由apache基金会所开发的能够对大量数据进行分布式处理的软件框架。用户可在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。hdfs:是hadoopdistributefilesystem的简称,也就是hadoop的一个分布式文件系统,是hadoop系统中的核心组件之一。mapreduce:是一个使用简单的软件框架,基于它写出来的应用程序能够运行在由上千个机器组成的大型集群上,并以一种可靠容错并行处理tb级别的数据集,也是hadoop系统的核心组件之一。panda:本发明涉及的一个具体的大规模并行sql分析引擎。针对相关技术中的问题,目前尚未提出有效的解决方案。技术实现要素:针对相关技术中的上述技术问题,本发明提出一种访问hdfs分布式存储系统的标准接口,能够提高访问速度,高效处理各种查询和分析。为实现上述技术目的,本发明的技术方案是这样实现的:本发明通过将数据库的系统表信息存储在分布式数据库的master节点的本地文件,而其他所有表中数据存储到hsfs中。最终用户通过master节点接收客户端连接,并处理客户端的命令,master节点解析查询,优化查询,并向segment分发查询,并协调查询执行,master节点存储所有系统的元数据,不存储任何用户数据。master节点向segment分发查询时,将连同相关的元数据信息分发给segment进行处理。元数据中包含所请求表的hdfsurl地址,segment使用该url访问相应的数据。segment中不存储数据库表元数据和运行状态信息,也不在本地文件系统中存储数据信息,只负责计算。通过存储和计算的分离,可以动态启动任意多个虚拟segment来执行查询,提高了执行效率。在segment不保存状态,使得集群更容易扩展。由于hdfs数据文件是可拆分的,因此,可以赋予多个虚拟segment并发处理同一个数据文件,这提高了查询执行的并行度。为了决定哪个segment管理哪部分数据,master需要从hdfs的namenode获取数据的位置信息。由于hdfs在做rpc处理时会比较慢,尤其是当并发请求数很高时。我们增加一个hdfs目录缓存,它用来缓存数据的位置信息,从而加快hdfs的rpc处理。hdfs目录缓存是master点用来确定hdfs上表数据分布信息的一种缓存服务。本发明的有益效果:通过将元数据存储到master主机上的本地文件系统中,将其它所有表数据存储到hdfs中,而segment不存储任何状态和数据信息,只负责计算,从而实现读写存储和计算的分离,可以动态启动任意多个虚拟segment来执行查询,提高了执行效率。在segment不保存状态,使得集群更容易扩展。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是根据本发明实施例所述的一个典型的panda集群的主要组件示意图;图2是根据本发明实施例所述的panda的内部架构示意图;图3是根据本发明实施例所述的panda的执行流程示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。首先,将整个并行分析引擎称之为panda。图1介绍了一个典型的panda集群的主要组件。其中有几个master节点:pandamaster节点,pandamaster节点namenode,yarnmaster节点resourcemanager。panda元数据服务在pandamaster节点里面,其他节点为slave节点。每个slave节点上部署有hdfsdatanode,yarnnodemanager以及一pandasegment。pandasegment在执行查询的时候会启动多个qe(queryexecutor,查询执行器)。查询执行器运行在资源容器里面。图2是panda的内部架构图,从架构图可以看出panda的pandamaster节点内部有如下几个重要组件:查询解析器(parser/analyzer),优化器,资源管理器,资源代理,hdfs元数据缓存,容错服务,查询分发器,元数据服务。在每个slave节点上安装有一个物理segment,在查询执行时,针对一个查询,弹性执行引擎会自动启动多个虚拟segment同时执行查询,节点间数据交换通过interconnect(高速互联网络)进行。如果一个查询启动了100个虚拟segment,这个查询就被均匀的分成了100份任务,这些任务会并行执行,所以说虚拟segment数其实表明了查询的并行度。查询的并行度是由弹性执行引擎根据查询大小以及当前资源使用情况动态确定的。这些组件的作用以及它们之间的关系:1)查询解析器:负责解析查询,并检查语法及语义。最终生成查询树传递给优化器。2)优化器:负责接受查询树,生成查询计划。针对一个查询,可能有多个等价的查询计划,但执行性能差别很大。优化器的作用是找出最优的查询计划。3)资源管理器:资源管理器主要是进行资源管理,通过资源代理向全局资源管理器(比如yarn)动态申请资源,并缓存资源,在不需要的时候返回资源。通过资源缓存来减少panda与全局资源管理器之间的交互,提高查询性能。如果每一个小的查询都去向资源管理器申请资源,这样的话,性能会受到影响。资源管理器同时需要保证查询不使用超过分配给该查询的资源,否则查询之间会相互影响,可能导致系统整体不可用。4)hdfs元数据缓存:用于panda确定哪些segment扫描表的哪些部分。panda是把计算派遣到数据所在的地方。所以我们需要匹配计算和数据的局部性。这些需要hdfs块的位置信息。位置信息存储在hdfsnamenode上。每个查询都访问hdfsnamenode会造成namenode的瓶颈。所以我们在hawqmaster节点上建立了hdfs元数据缓存。5)容错服务:负责检测哪些节点可用,哪些节点不可用。不可用的机器会被排除出资源池。6)查询分发器:优化器优化完查询以后,查询分发器派遣计划到各个节点上执行,并协调查询执行的整个过程。查询分发器是整个并行系统的粘合剂。7)元数据服务:负责存储panda的各种元数据,包括数据库和表信息,以及访问权限信息等。另外,元数据服务也是实现分布式事务的关键。8)高速互联网络:负责在节点之间传输数据。软件实现,基于udp。panda主(master)节点是系统的入口点,是一个接受客户端连接,并处理sql命令的数据库进程。pandamaster节点解析查询,优化查询,向segment分发查询,并协调查询执行。最终用户通过master节点与panda交互。可以使用如psql的客户端程序,或者类似jdbc、odbc的应用程序接口(apis)连接到数据库。“全局系统目录”是一组系统表的集合,包含panda系统自身的元数据,存储在master节点中。master节点本身不含任何用户数据,数据只存储在hdfs上。master节点对客户端连接请求进行鉴权,处理输入的sql命令,在segment间分发任务,协调每个segment返回的结果,向客户端程序输出最终结果。在panda中,panda分区节点(segment)是并行数据处理单元。每个主机上只有一个物理segment,每个segment可以为一个查询片段启动多个查询执行器(queryexecutors,qes)。这使得单一的物理segment表现得像多个virtualsegment,从而使panda能够更好地利用所有可用资源。一个virtualsegment就像是qe的一个容器。每个virtualsegment含有为查询片段启动的一个qe。virtualsegment的数量被用于确定一个查询的并行度(degreeofparallelism,dop)。master节点sql请求连同相关的元数据信息分发给segment进行处理。元数据中包含所请求表的hdfsurl地址,segment使用该url访问相应的数据。在segment中不存储数据库表元数据,不存储状态信息,也不存储用户数据信息,只负责计算。通过存储和计算的分离,可以动态启动任意多个虚拟segment来执行查询,提高了执行效率。在segment不保存状态,使得集群更容易扩展。图3是panda的查询主要流程。用户通过jdbc/odbc提交查询之后,查询解析器得到查询树,然后优化器根据查询树生成查询计划,分发器和资源管理器打交道得到资源,分解查询计划,然后派遣计划到segment的执行器上面执行。最终结果会传回给用户。panda内部表的存储类型包括以下三种。●heap表:存放在postgres中。panda的元信息均以heap表的方式存储,存储在master节点的本地文件中。●row-oriented行式存储:panda自己提出的一种存储格式。元信息存放在pandamaster上,实际数据存放在hdfs上。row行存表将数据以block为单位逐次写出或者读入内存。●parquet列式存储:parquet是hadoop生态系统开源的数据文件格式,被多种数据引擎支持,包括hive、impala、storm等。parquet同row一样,元信息存储在pandamaster上,实际数据存放在hdfs上。parquet表将数据以rowgroup为单位写出或者读入内存。如果只需要读取几列数据,仅会读出rowgroup中这几列对应的数据。除系统表外,panda将其它所有表数据存储到hdfs中。当用户创建了一个表,其元数据存储到master主机上的本地文件系统中,表的数据存储到hdfs中。为了简化表数据管理,一个表中的所有数据都保存在一个hdfs目录中。当我们创建表并插入数据后,panda在hdfs上的数据是以目录tablespace/database/table/segfile的方式组织的。在系统表中gp_persistent_ralation_node,gp_persistent_tablespace_node,gp_persistent_filespace_node中分别存有表的relation_oid,tablespace_oid和database_oid,file_space_oid。而hdfs的url路径是在panda-site.xml里配置的,配置项为panda_dfs_url。对于所有panda表存储格式,ao(append-only)和parquet,数据文件是可拆分的,因此panda可以赋予多个虚拟segment并发处理同一个数据文件,这提高了查询执行的并行度。所有的panda表(除gpfdist外部表)是分布存储在hdfs上的。panda支持两种数据分布策略,随机与哈希。panda缺省的表分布策略是随机分布。相对于使用表的哈希分布策略,随机分布有一些好处。例如,当集群扩容后,panda可以自动使用更多的资源,而不再需要重新分布数据。对于大表,重新分布数据的代价是很高的。当底层hdfs在执行rebalance操作,或者某些datanode失效后,随机分布表的数据本地化会更好,而且集群规模越大,这种策略的优势越明显。另一方面,对于某些查询,哈希分布的表会比随机分布快。例如,在一些tpc-h查询中,哈希分布表的查询性能更好。在panda中,数据是跨越hdfs的datanode分布存储的。由于远程读取会引入网络i/o。panda给虚拟segment分配数据块时,综合考虑三个方面的因素:本地读取比例、数据文件连续读和保持虚拟segment间的数据平衡。panda通过这种数据本地化算法提升本地数据读取比例。除了自带数据存储格式,panda还可以与外部数据系统交互的功能。通过创建外部表,panda可以访问外部生态系统以及其它格式的数据,生态系统包括hive、hbase等,文件格式包括csv等。panda在访问外部表时可依照多种协议,比如file,gpfdist,gphdfs,http以及pxf。与创建外部表相比,pandaregister还能把外部数据源的文件直接注册到panda内部表,这样就能直接应用panda内部表的统计信息,性能会有更大的提升。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1