本文为您介绍Spark on MaxCompute如何访问位于阿里云VPC内的用户实例。

VPC访问说明

Spark on MaxCompute可以访问位于阿里云VPC内的实例(例如ECS、HBase、RDS),同时还可以访问用户的自定义私有域名。

访问VPC实例时,在spark-defaults.conf配置文件中添加spark.hadoop.odps.cupid.vpc.domain.list参数即可,描述需要访问的一个或多个实例的网络情况。该参数的值为JSON格式,配置时需要将JSON压缩成一行。

访问不同实例的spark.hadoop.odps.cupid.vpc.domain.list值请参见下面示例,您需要将示例中RegionID、VPCID、实例域名、端口等替换成您使用场景下的实际值。区域的RegionID请参见地域和可用区

示例1:访问MongoDB

当访问MongoDB时,spark.hadoop.odps.cupid.vpc.domain.list参数取值如下。该MongoDB有主备2个实例。
{
  "regionId":"cn-beijing",
  "vpcs":[
    {
      "vpcId":"vpc-2zeaeq21mb1dmkqh0****",
      "zones":[
        {
          "urls":[
            {
              "domain":"dds-2ze3230cfea08****.mongodb.rds.aliyuncs.com",
              "port": 3717
            },
            {
              "domain":"dds-2ze3230cfea08****.mongodb.rds.aliyuncs.com",
              "port":3717
            }
          ]
        }
      ]
    }
  ]
}

示例2:访问RDS

当访问RDS时,spark.hadoop.odps.cupid.vpc.domain.list参数取值如下。
{
  "regionId":"cn-beijing",
  "vpcs":[
    {
      "vpcId":"vpc-2zeaeq21mb1dmkqh0****",
      "zones":[
        {
          "urls":[
            {
              "domain":"rm-2zem49k73c54z****.mysql.rds.aliyuncs.com",
              "port": 3306
            }
          ]
        }
      ]
    }
  ]
}

示例3:访问HBase

当访问HBase时,spark.hadoop.odps.cupid.vpc.domain.list取值如下。
{
  "regionId":"cn-beijing",
  "vpcs":[
    {
      "vpcId":"vpc-2zeaeq21mb1dmkqh0exox",
      "zones":[
        {
          "urls":[
            {
              "domain":"hb-2zecxg2ltnpeg8me4-master*-***.hbase.rds.aliyuncs.com",
              "port":2181
            },
            {
              "domain":"hb-2zecxg2ltnpeg8me4-master*-***.hbase.rds.aliyuncs.com",
              "port":16000
            },
            {
              "domain":"hb-2zecxg2ltnpeg8me4-master*-***.hbase.rds.aliyuncs.com",
              "port":16020
            },
            {
              "domain":"hb-2zecxg2ltnpeg8me4-master*-***.hbase.rds.aliyuncs.com",
              "port":2181
            },
            {
              "domain":"hb-2zecxg2ltnpeg8me4-master*-***.hbase.rds.aliyuncs.com",
              "port":16000
            },
            {
              "domain":"hb-2zecxg2ltnpeg8me4-master*-***.hbase.rds.aliyuncs.com",
              "port":16020
            },
            {
              "domain":"hb-2zecxg2ltnpeg8me4-master*-***.hbase.rds.aliyuncs.com",
              "port":2181
            },
            {
              "domain":"hb-2zecxg2ltnpeg8me4-master*-***.hbase.rds.aliyuncs.com",
              "port":16000
            },
            {
              "domain":"hb-2zecxg2ltnpeg8me4-master*-***.hbase.rds.aliyuncs.com",
              "port":16020
            },
            {
              "domain":"hb-2zecxg2ltnpeg8me4-cor*-***.hbase.rds.aliyuncs.com",
              "port":16020
            },
            {
              "domain":"hb-2zecxg2ltnpeg8me4-cor*-***.hbase.rds.aliyuncs.com",
              "port":16020
            },
            {
              "domain":"hb-2zecxg2ltnpeg8me4-cor*-***.hbase.rds.aliyuncs.com",
              "port":16020
            }
          ]
        }
      ]
    }
  ]
}

示例4:访问Redis

当访问Redis时,spark.hadoop.odps.cupid.vpc.domain.list参数取值如下。
{
  "regionId":"cn-beijing",
  "vpcs":[
    {
      "vpcId":"vpc-2zeaeq21mb1dmkqh0****",
      "zones":[
        {
          "urls":[
            {
              "domain":"r-2zebda0d3c05****.redis.rds.aliyuncs.com",
              "port":3717
            }
          ]
        }
      ]
    }
  ]
}

示例5:访问LogHub

访问LogHub时,spark.hadoop.odps.cupid.vpc.domain.list参数取值如下。
{
  "regionId":"cn-beijing",
  "vpcs":[
    {
      "zones":[
        {
          "urls":[
            {
              "domain":"cn-beijing-intranet.log.aliyuncs.com",
              "port":80
            }
          ]
        }
      ]
    }
  ]
}

domain请使用LogHub Endpoint的经典网络或VPC网络服务入口,各Region对应的Endpoint请参见服务入口

示例6:访问DataHub

访问DataHub时,spark.hadoop.odps.cupid.vpc.domain.list参数取值如下。
{
  "regionId":"cn-beijing",
  "vpcs":[
    {
      "zones":[
        {
          "urls":[
            {
              "domain":"dh-cn-beijing.aliyun-inc.com",
              "port":80
            }
          ]
        }
      ]
    }
  ]
}

domain请使用Datahub Endpoint的经典网络下的ECS Endpoint,各Region对应的Endpoint请参见域名列表

示例7:访问自定义域名

假设您在VPC内自定义了域名a.b.com,Spark通过域名和端口a.b.com:80发起访问。您在使用前需要完成以下配置:
  1. 在PrivateZone中将Zone关联至VPC。详情请参见关联/解关联VPC。
  2. 单击一键授权,为MaxCompute赋予PrivateZone的只读权限。
  3. 在Spark节点配置里新增如下2个参数。
    spark.hadoop.odps.cupid.pvtz.rolearn=acs:ram::xxxxxxxxxxx:role/aliyunodpsdefaultrole 
    spark.hadoop.odps.cupid.vpc.usepvtz=true

    spark.hadoop.odps.cupid.pvtz.rolearn为用户的ARN信息,从RAM控制台可以获取。

  4. 在Spark的配置文件中新增spark.hadoop.odps.cupid.vpc.domain.list参数,参数取值如下。
    {
      "regionId":"cn-beijing",
      "vpcs":[
        {
          "vpcId":"vpc-2zeaeq21mb1dmkqh0****",
          "zones":[
            {
              "urls":[
                {
                  "domain":"a.b.com",
                  "port":80
                }
              ],
              "zoneId":"9b7ce89c6a6090e114e0f7c415ed****"
            }
          ]
        }
      ]
    }

示例8:访问文件存储HDFS

文件存储HDFS产品的使用,请参见开通文件存储HDFS服务
  • 在Spark中使用文件存储HDFS需要新增hdfs-site.xml,内容如下所示。
    <?xml version="1.0"?>
    <configuration>
        <property>
            <name>fs.defaultFS</name>
            <value>dfs://DfsMountpointDomainName:10290</value>
        </property>
        <property>
            <name>fs.dfs.impl</name>
            <value>com.alibaba.dfs.DistributedFileSystem</value>
        </property>
        <property>
            <name>fs.AbstractFileSystem.dfs.impl</name>
            <value>com.alibaba.dfs.DFS</value>
        </property>
    </configuration>
  • 在Spark配置文件中新增spark.hadoop.odps.cupid.vpc.domain.list参数,参数取值如下。
    {
        "regionId": "cn-shanghai",
        "vpcs": [{
            "vpcId": "vpc-xxxxxx",
            "zones": [{
                "urls": [{
                    "domain": "DfsMountpointDomainName",
                    "port": 10290
                }]
            }]
        }]
    }