本文主要介绍Serverless Spark如何配置数据源网络来访问用户VPC网络中的数据。这些数据包括RDS系列、ADB系列、PolarDB系列、MongoDB、Elasticsearch、HBase、E-MapReduce、Kafka以及用户在ECS上自建的各种数据服务等。
背景信息
Serverless Spark进程(Driver和Executor)运行在安全容器中,安全容器可以动态挂载用户VPC网络的虚拟网卡,就如同运行在用户VPC网络内的ECS上一样,可以直接访问用户的数据源网络。虚拟网卡的生命周期跟Spark进程的生命周期一致,作业结束后,所有网卡也会被释放。
Serverless Spark要挂载用户VPC网络的虚拟网卡,只需要在Spark作业配置中配置VPC网络中的安全组ID和虚拟交换机ID即可。如果用户的ECS本来就可以访问目标数据,只需要在Spark作业配置中配置该ECS所在的安全组ID和虚拟交换机ID即可。
说明 Spark的计算容器,Driver和每个Executor都会占用所配置的虚拟交换机下面的一个IP,提交作业前,请确保虚拟交换机网段的剩余IP数充足。
注意事项
访问服务型云产品中的数据,无需进行本文档中的配置,这些服务包括OSS、MaxCompute、TableStore、SLS等,这些服务一般都需要配置用户AK访问公共服务地址。
操作步骤
- 准备虚拟交换机和安全组。
DLA提供了三种方法来准备虚拟交换机和安全组。如果您的某个ECS通过VPC内网访问过目标数据源,那么推荐您直接选取该ECS的安全组和虚拟交换机,这个方法最简单,请参考下面的方法1;如果您的ECS不能访问目标数据源,您可以在数据源基础信息页面中获取相应信息,参考方法2;您也可以选择创建新的安全组和虚拟交换机,参考方法3。
- 方法1:选取ECS的安全组和虚拟交换机
- 登录ECS控制台,在ECS的实例列表中定位到该ECS实例。
- 在该ECS实例的实例详情页面查看安全组ID和虚拟交换机ID,如下图所示:
- 方法2:使用目标数据源已有的交换机ID和安全组ID
您可以在目标数据源的基础信息页面获取交换机ID和安全组ID,以E-MapReduce为例:
当目标数据源的基础信息页面中不存在安全组信息时,可以进入
VPC控制台,进入目标数据源VPC中任意选择一个安全组即可。
- 方法3:在要访问的VPC网络内创建新的安全组和交换机
- 在要访问的VPC网络内创建新的交换机和安全组,具体操作请参见创建交换机和创建安全组。
- 允许上个步骤创建的安全组出方向访问目标数据源。
登录ECS控制台,打开安全组规则页面,配置出方向允许访问目标数据源。具体操作请参见添加安全组规则。
- 为配置的交换机网段添加白名单。
- 目标数据源如果是阿里云实例型产品,例如RDS、MongoDB等,您可以登录控制台去配置白名单。您可以在白名单中配置虚拟交换机IP地址段和安全组ID。以RDS为例,如下图所示:
- 目标数据源如果是用户基于ECS自建,则需要在目标数据源所在ECS的安全组规则页面,配置入方向允许新创建的安全组或者交换机网段访问目标数据源。具体操作请参见添加安全组规则。
说明 如果您的安全组是
企业安全组,默认不支持同一个安全组内的机器相互访问,需要将您选择的vSwitch所在的网段,加到此安全组的出、入方向。
- 提交Spark作业。
在Serverless Spark中编写Spark-Submit的脚本,具体操作请参见
创建和执行Spark作业。
{
"name": "SparkPi",
"file": "local:///tmp/spark-examples.jar",
"className": "org.apache.spark.examples.DriverSubmissio*****",
"args": [
"100000"
],
"conf": {
"spark.driver.resourceSpec": "small",
"spark.executor.resourceSpec": "medium",
"spark.executor.instances": 1,
"spark.dla.eni.enable": "true",
"spark.dla.eni.vswitch.id": "vsw-bp17jqw3lrrobn6y*****",
"spark.dla.eni.security.group.id": "sg-bp163uxgt4zandx*****",
}
}
说明
spark.dla.eni.enable
取值为true
时,表示启用访问用户VPC功能,挂载用户数据源网络虚拟网卡。
spark.dla.eni.vswitch.id
和spark.dla.eni.security.group.id
配置为步骤一中获取的虚拟交换机ID和安全组ID。