本文主要介绍Serverless Spark如何配置数据源网络来访问用户VPC网络空间中的数据。这些数据包括RDS、ADB、PolarDB、MongoDB、ElasticSearch、HBase、EMR Hadoop,Kafka以及用户在ECS上自建的各种数据服务等。

注意事项

访问服务型云产品中的数据,不需要本文中的配置,这些服务包括:OSS、MaxCompute、TableStore等,这些服务一般都是要配置用户AK访问公共服务地址。

原理介绍

Serverless Spark进程(Driver和Executor)运行在安全容器中,安全容器可以动态挂载用户VPC空间的虚拟网卡,就如同运行在用户VPC内的ECS上一样,可以直接访问用户的数据源网络。虚拟网卡的生命周期跟Spark进程的生命周期一致,作业结束后,所有网卡也会相应释放。

Serverless Spark要挂载用户VPC的虚拟网卡,只需要在作业配置中配置上VPC中的安全组ID和虚拟交换机ID即可。如果用户某个ECS本来就可以访问目标数据,那么让Serverless Spark配置该ECS所在的安全组ID和虚拟交换机ID即可。

说明 Spark计算容器(Driver和每个Executor)都会占用一个所配置虚拟交换机下面的一个IP,提交作业前,请确保虚拟交换机网段的剩余可用IP充足。

准备虚拟交换机和安全组

DLA提供了三种方法来准备虚拟交换机和安全组。如果您的某个ECS通过VPC内网访问过目标数据,那么推荐您直接选取该ECS的安全组和虚拟交换机,这个方法最简单,请参考下面的方法1;如果没有,您可以在数据源基本信息页中获取相应信息,参考方法2;您也可以选择创建新的安全组和虚拟交换机,参考方法3。

方法1. 选取已存在的安全组和交换机

如果您之前的某个ECS访问过目标数据,如RDS,那么直接选取该ECS的安全组和交换机即可。查看方法如下:

  1. 登录ECS控制台,在实例搜索框中找到该实例。
  2. 在该ECS的实例详情页面查看虚拟交换机(VSwitch)ID,如下图:VSwitch
  3. 本实例安全组页面查看安全组ID,如下图所示:安全组

方法2. 使用已有的交换机和安全组信息

  1. 交换机ID您可以在相关数据源的基本信息页面获取,以RDS为例:rds
  2. 有些数据源安全组信息可以在数据源的基本信息页获取,以EMR为例:安全组
  3. 当数据源的基本信息页中不存在安全组信息时,可以进入VPC控制台,进入相应的数据源VPC中任意选择一个安全组即可安全组

方法3. 在要访问的VPC内创建新的安全组和交换机

  1. 创建交换机

    详细操作步骤 请参见创建交换机

  2. 创建安全组

    详细操作步骤 请参见创建安全组

  3. 上个步骤创建的安全组出方向允许访问目标数据
    打开安全组配置页面。(安全组配置入口在ECS控制台左侧控制栏网络与安全。)配置出方向允许访问目标数据,如下图所示:安全组出方向

为配置的交换机网段添加白名单

目标数据如果是阿里云实例型产品,比如RDS和MongoDB等,这种一般在产品控制台可以配置白名单,白名单一般是IP地址段也可以是安全组。如果配置IP地址段,需要将步骤1中创建的虚拟交换机IP段配置进去。如果是安全组,把步骤2中配置的安全组配置进去即可。我们以rds为例白名单

目标数据源如果是用户基于ECS自建,则需要配置目标数据所在的ECS的安全组入方向,允许新创建的安全组或者交换机网段访问。

说明
  1. 安全组配置细节,可以参考安全组文档:添加安全组规则
  2. 绝大多数情况下访问不通的问题都是安全组或者白名单配置问题,请检查Spark作业安全组出方向的配置和目标输入安全组入方向或者目标数据白名单的配置。

提交作业

在Serverless Spark中编写Spark-Submit的脚本,详细操作步骤请参见创建和执行Spark作业tp
说明
  1. spark.dla.eni.enable这个参数为ture表示启用打通访问用户VPC功能,挂载用户数据源网络虚拟网卡
  2. spark.dla.eni.vswitch.id配置为准备虚拟交换机和安全组中获取的虚拟交换机ID。
  3. spark.dla.eni.security.group.id配置为准备虚拟交换机和安全组中获取的安全组ID。