本文主要介绍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访问公共服务地址。

操作步骤

  1. 准备虚拟交换机和安全组。
    DLA提供了三种方法来准备虚拟交换机和安全组。如果您的某个ECS通过VPC内网访问过目标数据源,那么推荐您直接选取该ECS的安全组和虚拟交换机,这个方法最简单,请参考下面的方法1;如果您的ECS不能访问目标数据源,您可以在数据源基础信息页面中获取相应信息,参考方法2;您也可以选择创建新的安全组和虚拟交换机,参考方法3。
    • 方法1:选取ECS的安全组和虚拟交换机
      1. 登录ECS控制台,在ECS的实例列表中定位到该ECS实例。
      2. 在该ECS实例的实例详情页面查看安全组ID和虚拟交换机ID,如下图所示:安全组ID和虚拟交换机ID
    • 方法2:使用目标数据源已有的交换机ID和安全组ID
      您可以在目标数据源的基础信息页面获取交换机ID和安全组ID,以E-MapReduce为例:集群基础信息
      当目标数据源的基础信息页面中不存在安全组信息时,可以进入VPC控制台,进入目标数据源VPC中任意选择一个安全组即可。安全组ID
    • 方法3:在要访问的VPC网络内创建新的安全组和交换机
      1. 在要访问的VPC网络内创建新的交换机和安全组,具体操作请参见创建交换机创建安全组
      2. 允许上个步骤创建的安全组出方向访问目标数据源。

        登录ECS控制台,打开安全组规则页面,配置出方向允许访问目标数据源。具体操作请参见添加安全组规则

  2. 为配置的交换机网段添加白名单。
    • 目标数据源如果是阿里云实例型产品,例如RDS、MongoDB等,您可以登录控制台去配置白名单。您可以在白名单中配置虚拟交换机IP地址段和安全组ID。以RDS为例,如下图所示:白名单和安全组
    • 目标数据源如果是用户基于ECS自建,则需要在目标数据源所在ECS的安全组规则页面,配置入方向允许新创建的安全组或者交换机网段访问目标数据源。具体操作请参见添加安全组规则
    说明 如果您的安全组是企业安全组,默认不支持同一个安全组内的机器相互访问,需要将您选择的VSwitch所在的网段,加到此安全组的出、入方向。
  3. 提交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.idspark.dla.eni.security.group.id配置为步骤一中获取的虚拟交换机ID和安全组ID。