spark集群访问mysql_一种Spark并行访问MPP数据库的方法与流程

本发明提出一种Spark并行访问MPP数据库的方法,通过JDBC连接到管理节点获取数据分布信息,然后连接多个数据节点并行获取数据,利用Spark集群和MPP数据库的多机优势,显著提升访问效率。
摘要由CSDN通过智能技术生成

本发明涉及数据库

技术领域:

:,具体来说,涉及一种Spark并行访问MPP数据库的方法。

背景技术:

::从关系数据库读取数据,Spark可以使用DataFrame和JdbcRDD等方法。这些方法在接口上都提供一个JDBC连接串到数据库的入口(包含主机+端口号),在实现上通过JDBC连接到这一个入口节点访问数据库。从性能角度考虑,这些方法对于单机数据库来说是可以接受的;但对于MPP数据库来说不可接受。因为对于MPP数据库来说,一个表的数据可能会分布在集群的多个数据节点上,而Spark只以一个管理节点作为入口访问数据库——即使JdbcRDD方法支持按关键列的值分区,可以并发多个连接到入口节点——但整体的性能瓶颈仍是(由JDBC连接串指定的)入口节点,无法充分发挥集群多机的性能优势。以下为本发明中可能会涉及的一些关键术语:Spark:一个快速的、通用的大规模数据处理引擎。MPP:massivelyparallelprocessing,大规模并行处理技术。管理节点:分布式数据库系统中,接受客户端连接并解释SQL,将工作分配给计算节点,向客户端返回结果集。计算节点:存储和进行SQL计算的节点。针对相关技术中的问题,目前尚未提出有效的解决方案。技术实现要素:针对相关技术中的上述技术问题,本发明提出一种Spark并行访问MPP数据库的方法,Spark可以通过JDBC连接到集群的一个管理节点上,获取表数据在集群节点间的分布信息,然后通过JDBC连接到多个数据节点并行地获取表数据。为实现上述技术目的,本发明的技术方案是这样实现的:一种Spark并行访问MPP数据库的方法,包括以下步骤:S1Spark集群中的节点访问MPP数据库的入口(管理节点1),管理节点1收集表数据在MPP数据库集群中的分布信息并返回给Spark,假设数据分布在数据节点1、2和3;S2Spark先将收到的每个数据节点作为一个分区(假设为分区1、2和3),如果指定了关键列,则会依据关键列值的上下界,将每个分区再细分为多个分区。假设数据节点1上关键列的值范围为[1,100000],那么将会把分区1划分为10个分区,分别查询键值为[1,10000],[10001,20000],……,[90001,100000]的数据。对其他数据节点也同样以关键列值划分多个分区。S3Spark将任务分配到执行节点,每个Spark执行节点通过JDBC连接对应的数据节点,Spark集群即可并行地访问MPP数据库。本发明的有益效果:Spark集群利用MPP数据库中数据在节点间的分布信息,进行动态的分区划分,利用框架通用的任务分配机制把分区分配给多个Spark执行节点来访问MPP数据库的多个节点,从而充分利用两个集群的多机优势,实现对MPP数据库的高度并行访问,大大提高访问速度。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是根据本发明实施例所述的一种Spark并行访问MPP数据库的方法的流程示意图;图2是根据本发明实施例所述的一种Spark并行访问MPP数据库的方法的应用示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。如图1至2所示,根据本发明实施例所述的一种Spark并行访问MPP数据库的方法,包括以下步骤:S1Spark集群中的节点访问MPP数据库的入口(管理节点1),管理节点1收集表数据在MPP数据库集群中的分布信息并返回给Spark,假设数据分布在数据节点1、2和3;S2Spark先将收到的每个数据节点作为一个分区(假设为分区1、2和3),如果指定了关键列,则会依据关键列值的上下界,将每个分区再细分为多个分区。假设数据节点1上关键列的值范围为[1,100000],那么将会把分区1划分为10个分区,分别查询键值为[1,10000],[10001,20000],……,[90001,100000]的数据。对其他数据节点也同样以关键列值划分多个分区。S3Spark将任务分配到执行节点,每个Spark执行节点通过JDBC连接对应的数据节点,Spark集群即可并行地访问MPP数据库。为了方便理解本发明的上述技术方案,以下通过具体使用方式上对本发明的上述技术方案进行详细说明。在具体使用时,根据本发明所述的一种Spark并行访问MPP数据库的方法,使用Scala语言实现MppRDD,以JAR包的形式供Spark调用。以SparkSQL为例,使用之前需要先importMppRDD。具体实现代码可参考:scala>importjava.sql.DriverManagerimportjava.sql.DriverManagerscale>importorg.apache.spark.rdd.MppRDDimportorg.apache.spark.rdd.MppRDDscala>valmpprdd=newMppRDD(sc,”jdbc:kingbaseanalyticsdb://localhost:5432/kingbase”,|”com.kingbase.kingbaseanalyticsdb.Driver”,”fgao”,””,”public.t1”,””,”a”,r=>(r.getInt(1),r.getString(2)))mpprdd:org.apache.spark.rdd.MppRDD[(Int,String)]=MppRDD[7]atMppRDDat<console>:35scala>mpprdd.collect().foreach(println)(1,hahaha)(3,saprk)(2,doooop)(4,mpprdd)jdbcUrl:必选。连接数据库的JDBCURL,形如"jdbc:subprotocol://host:port/database"。jdbcDriver:必选。JDBC驱动名。user:必选。访问数据库使用的用户名。password:可选。访问数据库使用的密码。dbTable:必选。要访问的数据库名,形如[schema.]tableName。whereClause:可选。查询的过滤条件,默认查询全部数据。keyColumn:可选。关键列名。如果指定关键列,则会依据关键列的值继续细分分区。最多可指定一列。mapRow:必选。从ResultSet到期望的单行结果的映射函数。综上所述,借助于本发明的上述技术方案,Spark可以通过JDBC连接到集群的一个管理节点上,获取表数据在集群节点间的分布信息,然后通过JDBC连接到多个数据节点并行地获取表数据,大大提高访问速度。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页1&nbsp2&nbsp3&nbsp当前第1页1&nbsp2&nbsp3&nbsp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值