本文主要介绍如何使用Serverless Spark通过ENI访问VPC中的RDS。

前提条件

Serverless Spark需要访问您的VPC,Serverless Spark访问VPC的操作步骤请参见访问用户VPC

设置RDS的白名单

详细操作步骤请参见如何设置RDS白名单。将ENI所在交换机的网段添加到RDS的白名单中,或者在RDS安全组中将ENI所在安全组添加进去。tp

在数据库中编写测试数据

详细操作步骤请参见通过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成功。tp