本文为您介绍如何使用Spark on MaxCompute访问阿里云VPC内的用户实例。
直接访问VPC
Spark on MaxCompute可以访问阿里云VPC内的云服务器ECS(Elastic Compute Service)、云数据库HBase(Hadoop Database)和云关系型数据库RDS(Relational Database Service)等实例,同时还可以访问自定义私有域名。
访问VPC实例时,在spark-defaults.conf或者DataWorks的配置文件中添加spark.hadoop.odps.cupid.vpc.domain.list
参数,表明需要访问的一个或多个实例的网络情况。该参数值为JSON格式,配置时需要删除参数中多行文本之间的空格和换行符,合并JSON文本为一行。
spark.hadoop.odps.cupid.vpc.domain.list
参数取值请参见下文示例。您需要将示例中的RegionID、VPCID、实例域名和端口等替换为实际使用场景下的值。区域的RegionID请参见项目空间操作。
- 需要添加100.104.0.0/16网段至所访问的服务的白名单。
- 如果RegionID为cn-shanghai或者cn-beijing,需要设置
spark.hadoop.odps.cupid.smartnat.enable=true
。 - Spark on MaxCompute只支持访问本Region下某一个VPC的服务,不支持同时访问多个VPC的服务。
- 不需要设置
spark.hadoop.odps.cupid.eni.enable=true
。
ENI专线访问VPC
相比直接访问VPC方式,ENI专线方式更加稳定,性能更好,且具备外网访问能力。
- ENI专线可以打通一个VPC,如果用户作业需要同时访问多个VPC,则可以将已经通过ENI专线打通的VPC与其他VPC之间再做打通即可。
- Spark作业运行所在MaxCompute项目的阿里云账号的UID与目标VPC所属的阿里云账号的UID必须一致,否则作业运行时会提示报错信息:
You are not allowed to use this vpc - vpc owner and project owner must be the same person
。
- 您需要将目标VPC的如下信息提供给MaxCompute技术支持团队:
- VPC所属地域。例如北京。
- User ID:MaxCompute项目所属阿里云账号的UID,同时也是目标VPC所属阿里云账号的UID。
- VPC ID:即用户需要通过ENI专线打通的目标VPC ID。
- VSwitchId:即目标VPC绑定的交换机ID,可以在VPC管理控制台界面查看,如果有多个从中选取一个即可。
- SecurityGroupId:即目标VPC的安全组ID。用户需要在目标VPC下新建一个安全组,用于对MaxCompute Spark访问VPC服务时进行访问控制。安全组的创建操作,请参见创建安全组。
- 对ENI进行授权。
授权的目的在于允许MaxCompute在VPC内创建ENI网卡,以实现MaxCompute到用户VPC的连通。用户只要在阿里云账号登录态下单击授权即可。
- 等待MaxCompute技术支持团队为您开通专线。
- 配置安全组规则。
在完成ENI专线开通后,用户还需要在待访问的服务中增加相关安全规则,授权代表MaxCompute的安全组,即上述第1步中提供的安全组能访问哪些服务的具体端口。例如9200、31000等。
例如,用户需要访问阿里云RDS,则需要在RDS中增加规则,允许第1步中创建的安全组访问。如果用户需要访问的服务无法添加安全组,只能添加IP,那么需要将第1步中所使用的vSwitch网段都添加进来。
- 配置用户作业。
运行Spark作业,需要增加如下两个配置,即可使用ENI专线连通目标VPC内的服务。
spark.hadoop.odps.cupid.eni.enable = true spark.hadoop.odps.cupid.eni.info = regionid:vpc id
原先Spark作业中的VPC如下操作和配置不再需要:spark.hadoop.odps.cupid.vpc.domain.list spark.hadoop.odps.cupid.smartnat.enable spark.hadoop.odps.cupid.pvtz.rolearn #(访问自定义域名) spark.hadoop.odps.cupid.vpc.usepvtz #(访问自定义域名)
访问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
}
]
}
]
}
]
}
合并示例中JSON文本为一行的结果如下。 {"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}]}]}]}
访问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
}
]
}
]
}
]
}
合并示例中JSON文本为一行的结果如下。
{"regionId":"cn-beijing","vpcs":[{"vpcId":"vpc-2zeaeq21mb1dmkqh0****","zones":[{"urls":[{"domain":"rm-2zem49k73c54z****.mysql.rds.aliyuncs.com","port": 3306}]}]}]}
访问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
}
]
}
]
}
]
}
合并示例中JSON文本为一行的结果如下。
{"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}]}]}]}
访问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
}
]
}
]
}
]
}
合并示例中JSON文本为一行的结果如下。
{"regionId":"cn-beijing","vpcs":[{"vpcId":"vpc-2zeaeq21mb1dmkqh0****","zones":[{"urls":[{"domain":"r-2zebda0d3c05****.redis.rds.aliyuncs.com","port":3717}]}]}]}
访问LogHub示例
spark.hadoop.odps.cupid.vpc.domain.list
参数取值如下。 {
"regionId":"cn-beijing",
"vpcs":[
{
"zones":[
{
"urls":[
{
"domain":"cn-beijing-intranet.log.aliyuncs.com",
"port":80
}
]
}
]
}
]
}
合并示例中JSON文本为一行的结果如下。
{"regionId":"cn-beijing","vpcs":[{"zones":[{"urls":[{"domain":"cn-beijing-intranet.log.aliyuncs.com","port":80}]}]}]}
domain请使用LogHub Endpoint的经典网络或VPC网络服务入口,各Region对应的Endpoint请参见服务入口。
访问DataHub示例
spark.hadoop.odps.cupid.vpc.domain.list
参数取值如下。 {
"regionId":"cn-beijing",
"vpcs":[
{
"zones":[
{
"urls":[
{
"domain":"dh-cn-beijing.aliyun-inc.com",
"port":80
}
]
}
]
}
]
}
合并示例中JSON文本为一行的结果如下。
{"regionId":"cn-beijing","vpcs":[{"zones":[{"urls":[{"domain":"dh-cn-beijing.aliyun-inc.com","port":80}]}]}]}
domain请使用DataHub Endpoint的经典网络下的ECS Endpoint。Region对应的Endpoint请参见域名列表。
访问自定义域名示例
example.aliyundoc.com
,Spark通过域名和端口example.aliyundoc.com:80
发起访问。您在使用前需要完成以下配置:
- 在PrivateZone中将Zone关联至VPC。
- 单击一键授权,为MaxCompute赋予PrivateZone的只读权限。
- 在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控制台可以获取。 - 在Spark的配置文件中新增
spark.hadoop.odps.cupid.vpc.domain.list
参数,取值如下。
合并示例中JSON文本为一行的结果如下。{ "regionId":"cn-beijing", "vpcs":[ { "vpcId":"vpc-2zeaeq21mb1dmkqh0****", "zones":[ { "urls":[ { "domain":"example.aliyundoc.com", "port":80 } ], "zoneId":"9b7ce89c6a6090e114e0f7c415ed****" } ] } ] }
{"regionId":"cn-beijing","vpcs":[{"vpcId":"vpc-2zeaeq21mb1dmkqh0****","zones":[{"urls":[{"domain":"example.aliyundoc.com","port":80}],"zoneId":"9b7ce89c6a6090e114e0f7c415ed****"}]}]}
访问文件存储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
参数,取值如下。
合并示例中JSON文本为一行的结果如下。{ "regionId": "cn-shanghai", "vpcs": [{ "vpcId": "vpc-xxxxxx", "zones": [{ "urls": [{ "domain": "DfsMountpointDomainName", "port": 10290 }] }] }] }
{"regionId": "cn-shanghai","vpcs": [{"vpcId": "vpc-xxxxxx","zones": [{"urls": [{"domain": "DfsMountpointDomainName","port": 10290}]}]}]}