Spark訪問VPC實(shí)例
本文為您介紹如何使用Spark on MaxCompute訪問阿里云VPC內(nèi)的用戶實(shí)例。
直接訪問VPC
Spark on MaxCompute可以訪問阿里云VPC內(nèi)的云服務(wù)器ECS(Elastic Compute Service)、云數(shù)據(jù)庫HBase(Hadoop Database)和云關(guān)系型數(shù)據(jù)庫RDS(Relational Database Service)等實(shí)例,同時(shí)還可以訪問自定義私有域名。
訪問VPC實(shí)例時(shí),在spark-defaults.conf或者DataWorks的配置文件中添加spark.hadoop.odps.cupid.vpc.domain.list
參數(shù),表明需要訪問的一個(gè)或多個(gè)實(shí)例的網(wǎng)絡(luò)情況。該參數(shù)值為JSON格式,配置時(shí)需要?jiǎng)h除參數(shù)中多行文本之間的空格和換行符,合并JSON文本為一行。
訪問不同實(shí)例時(shí),spark.hadoop.odps.cupid.vpc.domain.list
參數(shù)取值請參見下文示例。您需要將示例中的RegionID、VPCID、實(shí)例域名和端口等替換為實(shí)際使用場景下的值。區(qū)域的RegionID請參見項(xiàng)目空間操作。
需要添加100.104.0.0/16網(wǎng)段至所訪問的服務(wù)的白名單。
使用示例如下。
訪問MongoDB示例
訪問MongoDB時(shí),
spark.hadoop.odps.cupid.vpc.domain.list
參數(shù)取值如下。該MongoDB有主備2個(gè)實(shí)例。{ "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文本為一行的結(jié)果如下。
{"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示例
訪問RDS時(shí),
spark.hadoop.odps.cupid.vpc.domain.list
參數(shù)取值如下。{ "regionId":"cn-beijing", "vpcs":[ { "vpcId":"vpc-2zeaeq21mb1dmkqh0****", "zones":[ { "urls":[ { "domain":"rm-2zem49k73c54z****.mysql.rds.aliyuncs.com", "port": 3306 } ] } ] } ] }
合并示例中JSON文本為一行的結(jié)果如下。
{"regionId":"cn-beijing","vpcs":[{"vpcId":"vpc-2zeaeq21mb1dmkqh0****","zones":[{"urls":[{"domain":"rm-2zem49k73c54z****.mysql.rds.aliyuncs.com","port": 3306}]}]}]}
訪問HBase示例
訪問HBase時(shí),
spark.hadoop.odps.cupid.vpc.domain.list
參數(shù)取值如下。{ "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文本為一行的結(jié)果如下。
{"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示例
當(dāng)訪問Redis時(shí),
spark.hadoop.odps.cupid.vpc.domain.list
參數(shù)取值如下。{ "regionId":"cn-beijing", "vpcs":[ { "vpcId":"vpc-2zeaeq21mb1dmkqh0****", "zones":[ { "urls":[ { "domain":"r-2zebda0d3c05****.redis.rds.aliyuncs.com", "port":3717 } ] } ] } ] }
合并示例中JSON文本為一行的結(jié)果如下。
{"regionId":"cn-beijing","vpcs":[{"vpcId":"vpc-2zeaeq21mb1dmkqh0****","zones":[{"urls":[{"domain":"r-2zebda0d3c05****.redis.rds.aliyuncs.com","port":3717}]}]}]}
訪問LogHub示例
訪問LogHub時(shí),
spark.hadoop.odps.cupid.vpc.domain.list
參數(shù)取值如下。{ "regionId":"cn-beijing", "vpcs":[ { "zones":[ { "urls":[ { "domain":"cn-beijing-intranet.log.aliyuncs.com", "port":80 } ] } ] } ] }
合并示例中JSON文本為一行的結(jié)果如下。
{"regionId":"cn-beijing","vpcs":[{"zones":[{"urls":[{"domain":"cn-beijing-intranet.log.aliyuncs.com","port":80}]}]}]}
domain請使用LogHub Endpoint的經(jīng)典網(wǎng)絡(luò)或VPC網(wǎng)絡(luò)服務(wù)入口,各Region對應(yīng)的Endpoint請參見服務(wù)入口。
訪問DataHub示例
訪問DataHub時(shí),
spark.hadoop.odps.cupid.vpc.domain.list
參數(shù)取值如下。{ "regionId":"cn-beijing", "vpcs":[ { "zones":[ { "urls":[ { "domain":"dh-cn-beijing.aliyun-inc.com", "port":80 } ] } ] } ] }
合并示例中JSON文本為一行的結(jié)果如下。
{"regionId":"cn-beijing","vpcs":[{"zones":[{"urls":[{"domain":"dh-cn-beijing.aliyun-inc.com","port":80}]}]}]}
domain請使用DataHub Endpoint的經(jīng)典網(wǎng)絡(luò)下的ECS Endpoint。Region對應(yīng)的Endpoint請參見域名列表。
訪問自定義域名示例
假設(shè)您在VPC內(nèi)自定義了域名
example.aliyundoc.com
,Spark通過域名和端口example.aliyundoc.com:80
發(fā)起訪問。您在使用前需要完成以下配置:在PrivateZone中將Zone關(guān)聯(lián)至VPC。
單擊一鍵授權(quán),為MaxCompute賦予PrivateZone的只讀權(quán)限。
在Spark節(jié)點(diǎn)配置里新增如下2個(gè)參數(shù)。
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
參數(shù),取值如下。{ "regionId":"cn-beijing", "vpcs":[ { "vpcId":"vpc-2zeaeq21mb1dmkqh0****", "zones":[ { "urls":[ { "domain":"example.aliyundoc.com", "port":80 } ], "zoneId":"9b7ce89c6a6090e114e0f7c415ed****" } ] } ] }
合并示例中JSON文本為一行的結(jié)果如下。
{"regionId":"cn-beijing","vpcs":[{"vpcId":"vpc-2zeaeq21mb1dmkqh0****","zones":[{"urls":[{"domain":"example.aliyundoc.com","port":80}],"zoneId":"9b7ce89c6a6090e114e0f7c415ed****"}]}]}
訪問文件存儲HDFS示例
文件存儲HDFS產(chǎn)品的使用,請參見開通文件存儲 HDFS 版服務(wù)。
在Spark中使用文件存儲HDFS需要新增hdfs-site.xml,內(nèi)容如下所示。
<?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
參數(shù),取值如下。{ "regionId": "cn-shanghai", "vpcs": [{ "vpcId": "vpc-xxxxxx", "zones": [{ "urls": [{ "domain": "DfsMountpointDomainName", "port": 10290 }] }] }] }
合并示例中JSON文本為一行的結(jié)果如下。
{"regionId": "cn-shanghai","vpcs": [{"vpcId": "vpc-xxxxxx","zones": [{"urls": [{"domain": "DfsMountpointDomainName","port": 10290}]}]}]}
專有網(wǎng)絡(luò)訪問VPC
相比直接訪問VPC方式,ENI專線方式更加穩(wěn)定,性能更好,且具備外網(wǎng)訪問能力。
使用該方式時(shí),您需要注意:
ENI專線可以打通一個(gè)VPC,如果用戶作業(yè)需要同時(shí)訪問多個(gè)VPC,則可以將已經(jīng)通過ENI專線打通的VPC與其他VPC之間再做打通即可。
Spark作業(yè)運(yùn)行所在MaxCompute項(xiàng)目的阿里云賬號的UID與目標(biāo)VPC所屬的阿里云賬號的UID必須一致,否則作業(yè)運(yùn)行時(shí)會(huì)提示報(bào)錯(cuò)信息:
You are not allowed to use this vpc - vpc owner and project owner must be the same person
。
創(chuàng)建專有網(wǎng)絡(luò)連接操作,詳情請參考訪問VPC方案(專線直連)。