本文主要介绍如何使用Serverless Spark通过ENI访问VPC中的RDS。
前提条件
Serverless Spark需要访问您的VPC,Serverless Spark访问VPC的操作步骤请参见访问用户VPC。
设置RDS的白名单
详细操作步骤请参见如何设置RDS白名单。将ENI所在交换机的网段添加到RDS的白名单中,或者在RDS安全组中将ENI所在安全组添加进去。
在数据库中编写测试数据
详细操作步骤请参见通过DMS登录RDS数据库。测试数据内容如下:
CREATE TABLE `persons` (
`id` int(11) DEFAULT NULL,
`first_name` varchar(32) DEFAULT NULL,
`laster_name` varchar(32) DEFAULT NULL,
`age` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
;
insert into persons VALUES(1,'a','b',5);
insert into persons VALUES(2,'c','d',6);
insert into persons VALUES(3,'e','f',7);
编写访问RDS的SparkApplication
SparkApplication能根据传入的RDS库和表的信息来通过spark访问这个RDS库和表,然后把内容展示出来,例如:
package com.aliyun.spark
import org.apache.spark.sql.SparkSession
object SparkRDS {
def main(args: Array[String]): Unit = {
val sparkSession = SparkSession.builder()
.appName("rds test")
.getOrCreate()
val url = args(0)
val dbtable = args(1)
val user = args(2)
val password = args(3)
val jdbcDF = sparkSession.read
.format("jdbc")
.option("url", url)
.option("driver", "com.mysql.jdbc.Driver")
.option("dbtable", dbtable)
.option("user", user)
.option("password", password)
.load()
jdbcDF.show()
}
}
上传文件至对象储存OSS中
进行编译打包,把SparkApplication的Jar包和MySQL驱动依赖上传到OSS中,MySQL驱动依赖的下载地址为MySQL驱动依赖下载。
详细操作步骤请参见上传文件。
提交作业
在Serverless Spark中编写Spark-Submit的脚本,详细操作步骤请参见创建和执行Spark作业。脚本内容为:
{
"args": [
"jdbc:mysql://填写你的RDS的URL",
"persons",
"spark",
"填写你的密码"
],
"name": "changqing-dla-test",
"jars": [
"oss://changqing-dla-test/mysql-connector-java.jar"
],
"file": "oss://changqing-dla-test/rds_test.jar",
"className": "com.aliyun.spark.SparkRDS",
"conf": {
"spark.dla.eni.enable": "true",
"spark.dla.eni.vswitch.id": "填写你在上面选择的交换机的id",
"spark.dla.eni.security.group.id": "填写上面选择的安全组的id",
"spark.driver.resourceSpec": "medium",
"spark.executor.instances": 1,
"spark.executor.resourceSpec": "medium"
}
}
作业运行成功后单击操作列表中的日志按钮,出现如下图所示内容,表示Spark访问RDS成功。