一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于负载均衡的知识图谱分布式海量数据导入方法

2022-04-09 02:54:23 来源:中国专利 TAG:
1.本发明属于知识图谱数据导入
技术领域
:,具体涉及一种基于负载均衡的知识图谱分布式海量数据导入方法。
背景技术
::2.图数据库(graphdatabase,gdb)是一个使用图结构进行语义查询的数据库,它使用节点、边和属性来表示和存储数据。该系统的关键概念是图,它直接将存储中的数据项,与数据节点和节点间表示关系的边的集合相关联。图数据库是一种非关系型数据库,以解决现有关系数据库的局限性。尤其对于关系型数据库在大多数应用场景下(比如:查找用户朋友的朋友)需要进行复杂的多表联查操作。大量的多表联查操作,当表格中记录很多时,关系数据库计算量巨大,难以实时响应。而图数据库将关系建模为数据,以多跳查询取代了多表联查操作,大大提升了查询效率。3.具有代表性的图数据库包括neo4j、dgraph、janusgraph等。其中neo4j图数据库是开源nosql数据库,原生的图数据库,2003年开始开发,使用scala和java语言,2007年开始发布,是世界上最先进的图数据库之一。neo4j图数据库资料丰富、既支持olap(联机分析处理),也支持oltp(联机事务处理),并且neo4j官方也同时开发了非常美观的可视化界面,方便调试。4.然而,neo4j虽然方便易用,但是neo4j只支持单机系统,而现实世界中,随着固网宽带、移动互联网、物联网等的快速发展,数据正呈爆炸式增长,我们构建领域知识图谱工具的初衷也是为了融合多领域的异构数据,必然会对领域知识图谱工具在海量数据的存储与检索方面带来巨大挑战。在大数据时代的背景下,诸如janusgraph这样的分布式图数据库受到了工业界的青睐,对于janusgraph图数据库进行海量数据的导入进行图谱构建,一般采用如下几种方案:5.(1)第一种方案是将对源数据插入操作转化为janusgraph的gremlin查询语言进行逐条导入。6.(2)第二种方案是使用针对嵌入式janusgraph的工具——janusgraph-csv-loader对janusgraph进行海量数据导入。7.(3)第三种方案是基于存储后端cassandra的工具——janusgraph-util对存储后端为casandra的janusgraph数据库进行海量数据导入。8.对于第一种janusgraph数据导入方案,会有效率极低的问题,对于亿级别数据的导入甚至要花费若干天的时间,无法应对很多应用场景中海量数据井喷的需求;对于第二种数据导入方案,嵌入式janusgraph是从基于jvm的用户应用程序中打开嵌入式janusgraph图实例。在这种情况下,janusgraph是用户应用程序的一部分,应用程序一旦关闭,图实例也会被删除,不能实现数据持久化;对于第三种数据导入方案,主要针对janusgraph存储后端cassandra以批量写sstable的方式进行数据导入,然而janusgraph支持的存储后端除了cassandra以外还支持hbase、berkleydb等,其中hbase作为apache的顶级项目,为海量数据的存储提供了高可靠性、高性能、列存储、可伸缩、实时读写的基础,具有很广泛的应用,然而第三种方案并不能对hbase等所有存储后端进行支持。并且上述三种方案均没有考虑超级节点无法拆分,难以并行,从而降低数据导入性能的影响。所以,需要有能够缓解超级节点对于导入性能影响的知识图谱分布式海量数据导入方法和系统。技术实现要素:9.为解决现有技术存在的缺陷,本发明的目的在于提供一种基于负载均衡的知识图谱分布式海量数据导入方法及系统,能够通过分布式计算大幅度提升数据导入效率,通过基于节点切分的负载均衡方法使得对于超级节点数据导入实现并行化,最终达到对于超级节点数据的高效导入的目的。10.为达到以上目的,本发明采用的一种技术方案是:11.一种基于负载均衡的知识图谱分布式海量数据导入方法,包括以下步骤:12.s1、搭建spark分布式计算集群;13.s2、解决janusgraph与spark的jar包依赖冲突和版本冲突,使用sparkgraphcomputer接口进行连接测试;14.s3、调研spark进行图数据批量导入作业所擅长处理的输入文件格式,按照所述文件格式生成数据;15.s4、根据数据导入完整性和数据导入速度调整对spark集群worker节点的资源分配,优化导入速度;16.s5、对数据中的超级节点进行切分并且进行负载均衡,加速对超级节点数据的导入。17.进一步,如上所述的基于负载均衡的知识图谱分布式海量数据导入方法,步骤s1中搭建spark分布式计算集群的具体步骤包括:18.s11、安装hbase、es、spark、janusgraph、hdfs和yarn数据库的镜像;19.s12、创建docker网络,分布式集群的所有容器运行在同一所述docker网络下;20.s13、编写docker-compose.yml文件,配置好容器启动的依赖顺序,并且通过docker-compose技术搭建整个服务。21.进一步,如上所述的基于负载均衡的知识图谱分布式海量数据导入方法,步骤s2的具体步骤包括:22.用户通过sparkgraphcomputer提交olap请求和bulkloadervertexprogram;23.apachetinkerpop将用户提交的所述olap请求以及bulkloadervertexprogram转化成spark数据处理语言并提交到spark执行;24.修改配置文件使得spark能够使用janusgraphlib文件夹中的jar包,从而解决janusgraph与spark的jar包依赖冲突和版本冲突;25.使用sparkgraphcomputer接口进行连接测试。26.进一步,如上所述的基于负载均衡的知识图谱分布式海量数据导入方法,步骤s3中所述文件格式为graphson,存储方式为邻接表。27.再进一步,如上所述的基于负载均衡的知识图谱分布式海量数据导入方法,在所述邻接表中,每个顶点本质上是文件中的一行,且顶点行包含与所述顶点关联的所有边的列表以及顶点的所有属性。28.进一步,如上所述的基于负载均衡的知识图谱分布式海量数据导入方法,步骤s4的具体步骤包括:29.s41、增加executor的数量,从而提高application并行执行task的能力;30.s42、增加每个executor的cpucore,从而提高每个executor并行执行task的能力;31.s43、增加每个executor的内存大小。32.进一步,如上所述的基于负载均衡的知识图谱分布式海量数据导入方法,步骤s5的具体步骤包括:33.通过将具有多条边/属性的一个节点的一行拆成多行,将所述graphson文件按照executor的数量进行分块,保证每块的“质量”基本一致,构造graphson-average文件,使得工作负载平均分配到多台机器上。34.再进一步,如上所述的基于负载均衡的知识图谱分布式海量数据导入方法,所述保证每块的“质量”基本一致具体为:保证每块包含的边的数量加属性的数量一致。35.采用本发明所述的方法及系统,具有以下显著的技术效果:36.本发明所述的方法通过对bulkloadervertexprogram的源码调研,基于加快具有超级节点数据集的导入速度的需求,对批量导入的文件格式以及配置命令进行了更改,将文件中超级节点的一行数据拆成多行,并且将原始graphson文件按照executor的数量进行分块,保证每块的“质量”(边的数量 属性的数量)基本一致,通过这种方式把工作负载平均分配到集群的每一台机器上,极大地提高了海量数据导入的并行性;对于提升分布式知识图谱系统整体数据导入效率意义重大。附图说明37.图1是本发明具体实施方式中提供的基于负载均衡的知识图谱分布式海量数据导入方法流程图;38.图2是本发明提出的基于节点切分的负载均衡方法示意图;39.图3是本发明具体实施方式中提供的基于负载均衡的知识图谱分布式海量数据导入方法另一实施例的流程图;40.图4是图3实施例的架构图;41.图5是基于千万级别超级节点数据集的图谱构建实验结果图。具体实施方式42.下面结合具体的实施例与说明书附图对本发明进行进一步的描述。43.图1示出了本发明所述的基于负载均衡的知识图谱分布式海量数据导入方法流程图,包括以下步骤:44.s1、搭建spark分布式计算集群。具体步骤包括:45.s11、对hbase、es、spark、janusgraph、hdfs、yarn等数据库的镜像进行安装;46.s12、创建docker网络,分布式集群的所有容器运行在同一docker网络下;47.s13、编写docker-compose.yml文件,配置好容器启动的依赖顺序,并且通过docker-compose技术搭建整个服务。48.s2、解决janusgraph与spark的jar包依赖冲突和版本冲突,使用sparkgraphcomputer接口进行连接测试。具体方法为:49.s21、用户通过sparkgraphcomputer提交olap请求和bulkloadervertexprogram;50.s22、apachetinkerpop将用户提交的所述olap请求以及bulkloadervertexprogram转化成spark数据处理语言并提交到spark执行;51.s23、修改配置文件使得spark能够使用janusgraphlib文件夹中的jar包,从而解决janusgraph与spark的jar包依赖冲突和版本冲突;52.s24、使用sparkgraphcomputer接口进行连接测试。53.通过apachetinkepop的bulkloadervertexprogram方法采用sparkgraphcomputer实例与大数据平台相结合进行并行计算和处理,借助分布式计算集群并行、速度快的特点加速数据导入。apachetinkerpop提供了与分布式开源计算框架spark的接口,可以自动将用户提交的olap请求以及bulkloadervertexprogram转化成spark数据处理语言并提交到spark执行。由于janusgraph图数据库是受apache顶级项目tinkerpop图计算框架的支持,所以tinkerpop上的方法和接口也可以在janusgraph上复现和使用。本发明通过修改配置文件使得spark可以使用janusgraphlib文件夹中的jar包从而解决了janusgraph与spark的jar包依赖冲突和版本冲突,并且使用sparkgraphcomputer接口进行连接测试。54.s3、调研spark进行图数据批量导入作业所擅长处理的输入文件格式,按照相应格式生成数据。55.本实施例中,输入文件格式为graphson,graphson是一种基于json的格式,通过所有平台上广泛使用的json解析库,任何编程语言都可以轻松地支持它,graphson被视为“图形”格式和广义对象序列化格式。该特性使其可用作gremlinserver的序列化格式,使用邻接表法。在邻接列表中,每个顶点本质上是文件中的一行,并且顶点行包含与该顶点关联的所有边的列表,以及点的所有属性。56.s4、根据数据导入完整性和数据导入速度调整对spark集群worker节点的资源分配,优化导入速度。57.具体步骤包括:58.s41、增加executor的数量。如果executor数量比较少,那么能够并行执行的task数量就比较少,就意味着application的并行执行的能力很弱。59.s42、增加每个executor的cpucore,从而增加每个executor的并行执行task的能力。60.s43、增加每个executor的内存大小,从而增加可以缓存的rdd数,并且可以缓解频繁gc回收对task执行速度的影响。61.s5、对数据中的超级节点进行切分并且进行负载均衡,加速对超级节点数据的导入。62.图2示出了一种基于节点切分的负载均衡方法示意图。传统的海量数据导入方法无差别处理超级节点与一般节点,无法并行处理,效率低下。针对该局限性,本发明提出了对数据中的超级节点进行切分并且进行负载均衡的方法,该方法通过将具有多条边/属性的一个节点的一行拆成多行,将graphson文件按照executor的数量进行分块,保证每块的“质量”(边的数量 属性的数量)基本一致,构造graphson-average文件,使得工作负载平均分配到多台机器上,极大地提高了海量数据导入的并行性,并且支持增量导入,以支持金融等应用场景日益增长的海量数据快速导入,使得本发明的领域知识图谱工具能够适用于更多的应用场景;并且该技术不需要停机导入,在进行图谱的构建、自增长自演化时不会影响应用层,提升了用户使用体验。63.本发明可以用于分布式知识图谱系统进行大规模高效数据导入,并且支持对超级节点数据的导入,以下从多个应用客户端发出批量导入请求的应用实施例,进一步说明本发明的实施方式。64.图3是本发明具体实施方式中提供的基于负载均衡的知识图谱分布式海量数据导入方法另一实施例的流程图,图4是该应用实施例的架构图。所述方法包括以下步骤:65.1、根据本体映射结果,构造graphson-average文件;66.2、client(janusgraphgremlin-server)通过sparkgraphcomputer提交一个bulkloadervertexprogram的application;67.3、driver开始运行,初始化程序的入口sparkcontext,初始化dagscheduler,初始化taskscheduler;68.4、sparkcontext连接到master,并向master注册和申请资源;69.5、master根据sparkcontext的资源申请要求和worker心跳周期内报告的信息决定在哪个worker上分配资源,并启动worker上的executor;executor向sparkcontext(driver)提交注册,这样driver就知道有哪些executor为他服务了;70.6、sparkcontext将applicaiton代码发送给executor;71.7、sparkcontext解析applicaiton代码,构建dag图,并提交给dagscheduler分解成stage;72.8、dagscheduler将stage(或者称为taskset)提交给taskscheduler,taskscheduler负责将task分配到相应的worker,最后提交给executor执行;73.9、executor开始执行task,并向sparkcontext报告,直至所有job的task完成;74.10、最后所有task完成后,sparkcontext向master注销,释放资源。75.图5是基于千万级别超级节点数据集的图谱构建实验结果图。在本实验中,构造了一千万个节点(节点类型为“账户”)、一千万条边(边类型为“交易”)、两千万个属性(类型为“账户”的节点具有开户日期、开户行两个属性)的超级节点数据集,数据集大小为3.3gb。其中id为1的节点与其他9999999个节点均发生交易,id为1的节点度接近千万级别,是一个超级节点。基于构造的超级节点数据集,并在两块xeone5-2620cpu8核、内存512g、显卡4*titanxp的主流服务器环境针对apachetinkerpop的bulkloadervertexprogram方法以及基于节点切分的分布式集群负载均衡导入方法进行数据导入、图谱构建的效率测试。如图5所示,海量数据的导入速度相比apachetinkerpop的bulkloadervertexprogram方法提升了20倍。76.本发明提供的基于负载均衡的知识图谱分布式海量数据导入方法,通过对于bulkloadervertexprogram的源码调研,基于加快具有超级节点数据集的导入速度的需求,对批量导入的文件格式以及配置命令进行了更改,将文件中超级节点的一行数据拆成多行,并且将原始graphson文件按照executor的数量进行分块,保证每块的“质量”(边的数量 属性的数量)基本一致。通过这种方式把工作负载平均分配到集群的每一台机器上,极大地提高了海量数据导入的并行性。本发明有效地解决了janusgraph官方没有提供批量导入工具,现有技术不能进行数据持久化、导入效率低下、无法缓解导入超级节点数据时效率骤降、无法针对所有存储后端的问题;对于提升分布式知识图谱系统整体数据导入效率意义重大。77.上述实施例只是对本发明的举例说明,本发明也可以以其它的特定方式或其它的特定形式实施,而不偏离本发明的要旨或本质特征。因此,描述的实施方式从任何方面来看均应视为说明性而非限定性的。本发明的范围应由附加的权利要求说明,任何与权利要求的意图和范围等效的变化也应包含在本发明的范围内。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献