網(wǎng)絡(luò)開通流程
當(dāng)您通過MaxCompute訪問位于公網(wǎng)或VPC網(wǎng)絡(luò)中的目標(biāo)服務(wù)時(shí),默認(rèn)情況下,MaxCompute與目標(biāo)服務(wù)之間的網(wǎng)絡(luò)不可達(dá)。您需要開通網(wǎng)絡(luò)連接以便訪問公網(wǎng)或VPC中的目標(biāo)服務(wù)(例如指定IP或域名、RDS、HBase集群、Hadoop集群等)。本文為您介紹MaxCompute與目標(biāo)服務(wù)間的網(wǎng)絡(luò)結(jié)構(gòu)及支持的網(wǎng)絡(luò)開通方案。
免責(zé)聲明
MaxCompute提供的公網(wǎng)與VPC訪問能力目前屬于免費(fèi)服務(wù),存在以下限制:
保障網(wǎng)絡(luò)連通性,但是對(duì)用戶代碼觸發(fā)的網(wǎng)絡(luò)行為,平臺(tái)可能因?yàn)楣收锨袚Q的原因?qū)е鹿?jié)點(diǎn)重跑,用戶需要在代碼層面做兼容,建議只做數(shù)據(jù)讀取操作,寫操作需要自行防止多次寫入可能產(chǎn)生的臟數(shù)據(jù)。
訪問需要經(jīng)過代理,代理的轉(zhuǎn)發(fā)能力有限,盡量使用長連接,并控制節(jié)點(diǎn)規(guī)模,并發(fā)過大或連接過多可能導(dǎo)致網(wǎng)絡(luò)請(qǐng)求失敗。
不保障帶寬,因此可能存在任務(wù)運(yùn)行慢情況,平臺(tái)不承擔(dān)相應(yīng)責(zé)任。
經(jīng)過代理后的出口IP有限,因此出現(xiàn)的連接行為異常,此時(shí)需要與阿里云技術(shù)支持確認(rèn)。
出口IP存在變更的可能性,被訪問的服務(wù)不應(yīng)該開啟訪問控制,對(duì)于針對(duì)代理出口配置IP白名單的情況,平臺(tái)不保障出口IP不變。
如果完成MaxCompute的網(wǎng)絡(luò)連通后,運(yùn)行MaxCompute任務(wù)時(shí)仍然出現(xiàn)了無法訪問等問題,可能是運(yùn)行MaxCompute任務(wù)的工具存在網(wǎng)絡(luò)限制。例如,使用DataWorks進(jìn)行數(shù)據(jù)同步或數(shù)據(jù)清洗時(shí),需保障DataWorks的資源組與數(shù)據(jù)源網(wǎng)絡(luò)連通、DataWorks的沙箱白名單沒有限制數(shù)據(jù)源的訪問,DataWorks的資源組網(wǎng)絡(luò)連通與沙箱配置請(qǐng)參見:網(wǎng)絡(luò)連通方案。
功能介紹
MaxCompute與目標(biāo)服務(wù)間的網(wǎng)絡(luò)結(jié)構(gòu)及支持的網(wǎng)絡(luò)開通方案如下:
MaxCompute訪問目標(biāo)服務(wù)有如下四種場景:
場景一:訪問公網(wǎng)方案。
適用于通過MaxCompute自定義函數(shù)(UDF)、Spark 、MR、PyODPS/Mars訪問處于公網(wǎng)中的目標(biāo)IP或域名的場景。對(duì)于常用的公網(wǎng)或域名(如aliyun.com),您可以直接通過MaxCompute控制臺(tái)的項(xiàng)目管理進(jìn)行添加與刪除,無法通過自動(dòng)校驗(yàn)的公網(wǎng)IP或域名需要您填寫MaxCompute項(xiàng)目訪問外部網(wǎng)絡(luò)申請(qǐng)表單,如果目標(biāo)IP或域名不存在安全限制,審核通過后即可訪問,審核周期為3個(gè)工作日內(nèi)。
說明當(dāng)服務(wù)端訪問的目標(biāo)公網(wǎng)IP或域名存在安全準(zhǔn)入限制時(shí),請(qǐng)聯(lián)系您組織內(nèi)對(duì)應(yīng)責(zé)任人根據(jù)相應(yīng)的安全限制進(jìn)行處理,確保MaxCompute訪問公網(wǎng)IP或域名不受限制。
場景二:訪問VPC方案(專線直連)。
適用于通過MaxCompute SQL、UDF、Spark 、MR、PyODPS/Mars、外部表或基于湖倉一體架構(gòu)訪問處于VPC網(wǎng)絡(luò)下的RDS、HBase集群、Hadoop集群等場景。您需要登錄VPC所屬主賬號(hào)對(duì)MaxCompute進(jìn)行授權(quán),并在MaxCompute控制臺(tái)創(chuàng)建MaxCompute與VPC網(wǎng)絡(luò)之間的連接,創(chuàng)建完成后,您可以在控制臺(tái)下看到MaxCompute創(chuàng)建的ENI網(wǎng)卡,該ENI網(wǎng)卡的訪問規(guī)則由創(chuàng)建專有網(wǎng)絡(luò)連接時(shí)您提供的安全組控制,以此來建立MaxCompute與目標(biāo)服務(wù)間的網(wǎng)絡(luò)通路。
說明如果目標(biāo)服務(wù)存在訪問控制,需要您將ENI網(wǎng)卡IP或者vSwitch網(wǎng)段添加到目標(biāo)服務(wù)的訪問白名單中。
MaxCompute訪問VPC網(wǎng)絡(luò)時(shí),MaxCompute側(cè)僅打通到所填VPC ID的網(wǎng)絡(luò)連接,如需跨Region訪問或者訪問該Region的其他VPC,請(qǐng)根據(jù)云上VPC現(xiàn)有打通方案,打通專線直連方案中所配置的VPC和其他VPC之間的網(wǎng)絡(luò)。
場景三:訪問部分阿里云服務(wù)。
適用于通過MaxCompute SQL、UDF、Spark 、MR、PyODPS/Mars、外部表或基于湖倉一體架構(gòu)訪阿里云OSS、DLF、OTS(Tablestore)、Hologres等服務(wù)的場景,連接使用阿里云內(nèi)部服務(wù)提供的云產(chǎn)品互聯(lián)網(wǎng)絡(luò)地址。
如果您創(chuàng)建了OSS或OTS外部表,可以通過OSS、OTS的內(nèi)網(wǎng)Endpoint訪問。
如果您調(diào)用UDF訪問OSS、OTS,只能通過OSS、OTS的公網(wǎng)Endpoint訪問。
不同場景下的配置與訪問Endpoint詳情請(qǐng)參見下文的訪問部分阿里云服務(wù)章節(jié)。
前提條件
當(dāng)您申請(qǐng)開通MaxCompute與目標(biāo)服務(wù)間的網(wǎng)絡(luò)連接前,請(qǐng)確認(rèn)已滿足以下條件:
已創(chuàng)建MaxCompute項(xiàng)目。如果已有MaxCompute項(xiàng)目,直接使用即可,不必再創(chuàng)建新項(xiàng)目。在湖倉一體場景中,建議設(shè)置MaxCompute項(xiàng)目的數(shù)據(jù)類型為Hive兼容類型。更多創(chuàng)建MaxCompute項(xiàng)目信息,請(qǐng)參見創(chuàng)建MaxCompute項(xiàng)目。
如果需要訪問位于VPC網(wǎng)絡(luò)中的目標(biāo)服務(wù),請(qǐng)確保VPC所有者賬號(hào)、訪問MaxCompute項(xiàng)目的阿里云賬號(hào),以及目標(biāo)服務(wù)環(huán)境或集群的管理員賬號(hào)是同一個(gè)主賬號(hào)或同在一個(gè)主賬號(hào)下。
地域支持情況
MaxCompute僅支持在如下地域通過訪問公網(wǎng)或VPC網(wǎng)絡(luò)方案開通網(wǎng)絡(luò)連接。
方案類型 | 支持地域 | 支持連通的目標(biāo) |
訪問公網(wǎng)方案 |
| 公網(wǎng)IP或域名 |
訪問VPC方案(專線直連) |
|
|
訪問公網(wǎng)方案
通過項(xiàng)目管理編輯外部網(wǎng)絡(luò)地址
對(duì)于常用的公網(wǎng)IP或域名(如aliyun.com),您可以直接通過MaxCompute控制臺(tái)的項(xiàng)目管理進(jìn)行添加與刪除:
登錄MaxCompute控制臺(tái),在左上角選擇地域。
在左側(cè)導(dǎo)航欄單擊項(xiàng)目管理。
在項(xiàng)目管理頁面,單擊目標(biāo)項(xiàng)目操作列的管理。
在參數(shù)配置頁簽的外部網(wǎng)絡(luò)區(qū)域,設(shè)置可用的外部網(wǎng)絡(luò)地址。
單擊提交。
支持的一級(jí)域名包括:aliyuncs.com、aliyun.com、amap.com、dingtalk.com、alicloudapi.com、cainiao.com、alicdn.com、taobao.com、alibaba.com、alipaydev.com、alibabadns.com。
不支持配置IPv6地址,公網(wǎng)IP數(shù)量無限制。
如果您遇到某外部網(wǎng)絡(luò)地址無法通過自動(dòng)校驗(yàn)的問題,則需要?jiǎng)h除該地址后重新提交。如仍有需要,您可以通過提交表單申請(qǐng)的方式,申請(qǐng)配置外部網(wǎng)絡(luò)地址,具體操作請(qǐng)參見下述的提交申請(qǐng)。
提交申請(qǐng)
無法通過自動(dòng)校驗(yàn)的公網(wǎng)IP或域名需要按照如下步驟進(jìn)行操作:
填寫MaxCompute項(xiàng)目訪問外部網(wǎng)絡(luò)申請(qǐng)表單,申請(qǐng)配置公網(wǎng)的IP或域名、端口的白名單。
表單中需要填寫目標(biāo)IP或域名、端口,如果需要訪問多個(gè)域名或端口,請(qǐng)使用英文逗號(hào)(,)分隔。例如訪問阿里云域名,需要提供的網(wǎng)絡(luò)配置信息為
www.aliyun.com:80
;訪問高德服務(wù),需要提供的網(wǎng)絡(luò)配置信息為restapi.amap.com:443,restapi.amap.com:80
。MaxCompute技術(shù)支持團(tuán)隊(duì)接收到提交的申請(qǐng)信息后,會(huì)進(jìn)行審核并完成配置。確認(rèn)處理完畢后(通常處理周期為3個(gè)工作日),即可繼續(xù)執(zhí)行后續(xù)步驟。若對(duì)審核結(jié)果有異議,您可通過單擊申請(qǐng)鏈接或搜索(釘釘群號(hào):11782920)加入MaxCompute開發(fā)者社區(qū)釘群與我們溝通交流。
SQL自定義函數(shù)(UDF)任務(wù)
參數(shù)設(shè)置如下:
--設(shè)置網(wǎng)絡(luò)連接申請(qǐng)表單中配置的公網(wǎng)IP或域名、端口。即下方SQL語句要訪問的公網(wǎng)IP或域名。 --如果需要訪問多個(gè)域名或端口,請(qǐng)使用英文逗號(hào)(,)分隔 set odps.internet.access.list=<ip_address:port|realm_name:port>; --執(zhí)行SQL語句調(diào)用UDF。 select <UDF_name>("<http://ip_address|realm_name>");
ip_address:port | realm_name:port:必填。目標(biāo)公網(wǎng)IP或域名、端口。
UDF_name:訪問公網(wǎng)IP或域名的UDF。
任務(wù)示例代碼如下:
package com.aliyun.odps.test.udf; import com.aliyun.odps.udf.UDF; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; public class <UDF_name> extends UDF { public String evaluate(String urlStr) throws IOException { URL url = new URL(urlStr); StringBuilder sb = new StringBuilder(); try (BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()))) { String line; while ((line = reader.readLine()) != null) { sb.append(line).append('\n'); } } return sb.toString(); } }
執(zhí)行:基于UDF示例代碼創(chuàng)建的自定義函數(shù)名稱為
url_fetch
,網(wǎng)絡(luò)連接審核通過后,執(zhí)行命令示例如下。set odps.internet.access.list=www.aliyun.com:80; select url_fetch("http://www.aliyun.com");
Spark on MaxCompute任務(wù)
參數(shù)設(shè)置:此配置項(xiàng)需加在Spark客戶端的conf文件中或DataWorks提交Spark作業(yè)時(shí)的配置項(xiàng)中。
spark.hadoop.odps.cupid.smartnat.enable = true;
spark.hadoop.odps.cupid.internet.access.list=<ip_address:port>
白名單
如果用戶服務(wù)端有訪問控制,需要將MaxCompute訪問公網(wǎng)方案的出口IP添加到用戶服務(wù)白名單,出口IP請(qǐng)提交工單申請(qǐng)獲取。
訪問VPC方案(專線直連)
開通專線網(wǎng)絡(luò)連接
操作流程
授權(quán)操作:
需要針對(duì)登錄用戶授予能夠創(chuàng)建網(wǎng)絡(luò)連接對(duì)象Networklink(詳情請(qǐng)參見Networklink),授權(quán)的用戶需要是項(xiàng)目所有者(Project Owner),以及具備租戶級(jí)別的Super_Administrator或Admin角色的用戶(詳情請(qǐng)參見角色規(guī)劃),授權(quán)過程可參見租戶內(nèi)對(duì)象權(quán)限一覽表。
對(duì)MaxCompute進(jìn)行授權(quán):授權(quán)的目的在于允許MaxCompute在VPC內(nèi)創(chuàng)建ENI網(wǎng)卡,以實(shí)現(xiàn)MaxCompute到用戶VPC的連通。用戶只要在阿里云賬號(hào)登錄態(tài)下單擊授權(quán)即可。
說明MaxCompute訪問VPC時(shí)的計(jì)費(fèi)規(guī)則請(qǐng)參考功能計(jì)費(fèi)。
配置安全組規(guī)則:在VPC實(shí)例下,創(chuàng)建獨(dú)立安全組用于控制MaxCompute對(duì)VPC網(wǎng)絡(luò)內(nèi)的各種資源的訪問權(quán)限。
登錄專有網(wǎng)絡(luò)管理控制臺(tái),單擊目標(biāo)VPC實(shí)例ID后,單擊資源管理頁簽。
在資源管理頁簽的專有網(wǎng)絡(luò)資源區(qū)域,將鼠標(biāo)懸停至安全組數(shù)值上方后,單擊添加(注意:選擇安全組為普通安全組,不是企業(yè)安全組。普通安全組的出口是默認(rèn)開啟的。企業(yè)安全組的出口是默認(rèn)關(guān)閉的,會(huì)導(dǎo)致無法訪問VPC內(nèi)的任何服務(wù))為MaxCompute創(chuàng)建獨(dú)立安全組并記錄安全組ID。需要選擇與連通服務(wù)相同的VPC網(wǎng)絡(luò)。更多創(chuàng)建安全組操作,請(qǐng)參見創(chuàng)建安全組。
添加安全組:
配置安全組:
說明MaxCompute在后續(xù)的創(chuàng)建網(wǎng)絡(luò)通路過程中會(huì)默認(rèn)自動(dòng)根據(jù)帶寬需求創(chuàng)建2個(gè)ENI,不收取費(fèi)用,由MaxCompute創(chuàng)建的ENI將位于這個(gè)安全組內(nèi)。在HBase場景,如果用戶的HBase無法對(duì)某個(gè)安全組開放網(wǎng)絡(luò)權(quán)限,您可以將MaxCompute創(chuàng)建的ENI IP添加至白名單即可。由于ENI IP可能會(huì)發(fā)生變化,推薦您添加VPC實(shí)例對(duì)應(yīng)交換機(jī)的IP網(wǎng)段至白名單。您可以登錄ECS管理控制臺(tái),在左側(cè)導(dǎo)航欄,單擊彈性網(wǎng)卡,獲取ENI IP。
創(chuàng)建MaxCompute與目標(biāo)VPC網(wǎng)絡(luò)間的網(wǎng)絡(luò)連接。
阿里云賬號(hào)(主賬號(hào))或擁有MaxCompute租戶級(jí)別的Super_Administrator或Admin角色的RAM子賬號(hào)(詳情請(qǐng)參見MaxCompute租戶級(jí)別角色),可以在MaxCompute控制臺(tái)創(chuàng)建MaxCompute與VPC網(wǎng)絡(luò)之間的連接。操作如下:
在MaxCompute控制臺(tái)的左側(cè)導(dǎo)航欄單擊
。在新增網(wǎng)絡(luò)連接對(duì)話框中,按下表填寫參數(shù)后單擊確定。
參數(shù)名稱
說明
連接名稱
自定義網(wǎng)絡(luò)鏈接名稱。格式如下:
字母開頭。
只能包含字母、下劃線(_)和數(shù)字。
長度在1-63個(gè)字符。
類型
網(wǎng)絡(luò)連接類型。默認(rèn)為直通鏈接(passthrough)。
說明直通鏈接對(duì)應(yīng)的即是專有網(wǎng)絡(luò)連接方案。
區(qū)域
MaxCompute支持的通過專有網(wǎng)絡(luò)連接方案開通網(wǎng)絡(luò)連接的地域。詳情請(qǐng)參見開通地域。
已選擇VPC
VPC實(shí)例ID。
獲取方式如下:
連接HBase、Hadoop集群時(shí):您可以在對(duì)應(yīng)控制臺(tái)的網(wǎng)絡(luò)連接信息處獲取該信息。
其他情況:登錄專有網(wǎng)絡(luò)管理控制臺(tái),在專有網(wǎng)絡(luò)頁面即可獲取VPC ID。
交換機(jī)
VPC網(wǎng)絡(luò)綁定的交換機(jī)ID。
獲取方式如下:
連接HBase、Hadoop集群時(shí):您可以在對(duì)應(yīng)控制臺(tái)的網(wǎng)絡(luò)連接信息處獲取該信息。
其他情況:登錄專有網(wǎng)絡(luò)管理控制臺(tái),在左側(cè)導(dǎo)航欄單擊交換機(jī),即可在右側(cè)通過VPC實(shí)例ID獲取到交換機(jī)ID。
安全組
步驟【開通專線網(wǎng)絡(luò)連接】中記錄的安全組ID。
配置目標(biāo)服務(wù)的安全組。
在完成ENI專線開通后,用戶還需要在待訪問的服務(wù)中增加相關(guān)安全規(guī)則,授權(quán)代表MaxCompute的安全組,即就上述第二步中提供的安全組能訪問哪些服務(wù)的具體端口。例如9200、31000等。例如,用戶需要訪問阿里云RDS,則需要在RDS中增加規(guī)則,允許第二步中創(chuàng)建的安全組訪問。如果用戶需要訪問的服務(wù)無法添加安全組,只能添加IP,那么需要將目標(biāo)服務(wù)所在vSwitch網(wǎng)段都添加進(jìn)來。
配置Hadoop集群安全組。
為Hadoop集群的安全組配置如下信息,確保MaxCompute可以訪問Hadoop集群。安全組配置內(nèi)容如下:
配置Hadoop集群所在安全組的入方向訪問規(guī)則。
授權(quán)對(duì)象為ENI所在的安全組,即步驟2中創(chuàng)建的安全組。
HiveMetaStore端口:9083。
HDFS NameNode端口:8020。
HDFS DataNode端口:50010。
例如,當(dāng)您連接在阿里云E-MapReduce上創(chuàng)建的Hadoop集群時(shí),您需要配置的安全組規(guī)則如下圖所示。更多配置操作,請(qǐng)參見創(chuàng)建安全組。
配置HBase集群安全組。
將為MaxCompute創(chuàng)建的安全組或ENI IP加入HBase集群的安全組或IP白名單中。
例如,當(dāng)您連接阿里云HBase集群時(shí),可以登錄HBase管理控制臺(tái),在集群列表頁面單擊目標(biāo)集群名稱后,在左側(cè)導(dǎo)航欄單擊訪問控制,即可在安全組或白名單設(shè)置頁簽添加安全組或IP白名單。更多添加安全組或IP白名單操作,請(qǐng)參見設(shè)置白名單和安全組。
說明如果不允許添加安全組,您可以在白名單設(shè)置頁簽添加MaxCompute創(chuàng)建的ENI IP。當(dāng)MaxCompute配置變更時(shí),ENI IP可能會(huì)發(fā)生變化,推薦您添加交換機(jī)ID的IP網(wǎng)段添加至白名單。
配置RDS安全組。
將為MaxCompute創(chuàng)建的安全組或ENI IP加入RDS安全組或IP白名單中。
例如,當(dāng)您連接阿里云RDS時(shí),可以登錄RDS管理控制臺(tái),在實(shí)例列表頁面單擊目標(biāo)實(shí)例名稱后,在左側(cè)導(dǎo)航欄單擊白名單與安全組,即可在安全組或白名單設(shè)置頁簽添加安全組或IP白名單。更多添加安全組或IP白名單設(shè)置操作,請(qǐng)參見設(shè)置安全組或設(shè)置IP白名單。
說明當(dāng)MaxCompute配置變更時(shí),ENI IP可能會(huì)發(fā)生變化,推薦您將交換機(jī)ID的IP網(wǎng)段添加至白名單。
SQL任務(wù)
添加配置項(xiàng)
UDF訪問VPC網(wǎng)絡(luò)(詳情請(qǐng)參見:通過UDF訪問VPC網(wǎng)絡(luò)資源)。代碼如下:
--設(shè)置網(wǎng)絡(luò)連接名稱,即基于專有網(wǎng)絡(luò)連接方案配置的網(wǎng)連接名稱,僅本Session有效: set odps.session.networklink=testLink;
外部表訪問VPC網(wǎng)絡(luò)(詳情請(qǐng)參見:RDS外部表、HBase外部表、Lindorm外部表)。代碼如下:
-- 在建表語句中設(shè)置參數(shù) TBLPROPERTIES( 'networklink'='<networklink_name>')
湖倉一體配置Networklink(詳情請(qǐng)參見:MaxCompute湖倉一體概述)。
Spark on MaxCompute 任務(wù)
完成上述【開通專線網(wǎng)絡(luò)連接】操作后,可添加以下配置。
運(yùn)行Spark作業(yè),需要增加如下配置,即可使用ENI專線連通目標(biāo)VPC內(nèi)的服務(wù)(詳情請(qǐng)參見:Spark訪問VPC實(shí)例)。
spark.hadoop.odps.cupid.eni.enable = true
spark.hadoop.odps.cupid.eni.info=regionid:vpc id
白名單
如果用戶服務(wù)端有訪問控制,需要將創(chuàng)建專線網(wǎng)絡(luò)連接的安全組添加進(jìn)服務(wù)端白名單。
訪問部分阿里云服務(wù)
適用于通過MaxCompute SQL、UDF、Spark 、MR、PyODPS/Mars、外部表或基于湖倉一體架構(gòu)訪問阿里云OSS、DLF、OTS(Tablestore)、Hologres等服務(wù)的場景,連接使用阿里云內(nèi)部服務(wù)提供的云產(chǎn)品互聯(lián)網(wǎng)絡(luò)地址。
通過外部表訪問OSS、OTS
如果您創(chuàng)建了OSS或OTS外部表,可以通過OSS、OTS的內(nèi)網(wǎng)Endpoint訪問。
各地域的OSS內(nèi)網(wǎng)Endpoint請(qǐng)參見OSS地域和訪問域名文檔中,內(nèi)網(wǎng)Endpoint列。
各地域的OTS內(nèi)網(wǎng)Endpoint請(qǐng)參見服務(wù)地址中的經(jīng)典網(wǎng)地址。
其他通過外部表訪問的示例可參考:創(chuàng)建Hologres外部表。
通過UDF訪問OSS、OTS
如果您調(diào)用UDF訪問OSS、OTS,只能通過OSS、OTS的公網(wǎng)Endpoint訪問,且在使用公網(wǎng)Endpoint訪問前,您需要先將對(duì)應(yīng)Endpoint添加至MaxCompute的白名單中。
將待訪問的OSS、OTS的公網(wǎng)Endpoint添加至MaxCompute的白名單中。
您可以填寫MaxCompute項(xiàng)目訪問外部網(wǎng)絡(luò)申請(qǐng)表單,申請(qǐng)將待訪問的OSS、OTS的公網(wǎng)Endpoint添加到MaxCompute的白名單中。各地域的公網(wǎng)Endpoint獲取詳情如下。
各地域的OSS公網(wǎng)Endpoint請(qǐng)參見OSS地域和訪問域名文檔中,公網(wǎng)Endpoint列。
各地域的OTS公網(wǎng)Endpoint請(qǐng)參見服務(wù)地址中的公網(wǎng)地址。
使用公網(wǎng)Endpoint訪問OSS或OTS。
Spark on MaxCompute任務(wù)示例可參考:Spark訪問OSS。
常見問題
并發(fā)量過大導(dǎo)致DNS解析失敗
問題描述:UDF或Spark任務(wù)在運(yùn)行過程中,產(chǎn)生了大量的并發(fā)請(qǐng)求以訪問對(duì)端域名,導(dǎo)致DNS解析失敗。
解決方案:建議您在任務(wù)的初始化階段將域名解析為IP地址,并在執(zhí)行階段使用解析得到的IP地址進(jìn)行訪問。示例如下:
# -*- coding:UTF-8 -*- from odps.udf import annotate @annotate("string->string") class test_udf(object): __ip_address = '' def evaluate(self, inputPath): import requests output = 'false' retries = 3 print(self.__ip_address) url = f"http://{self.__ip_address}/{inputPath}" print(url) for i in range(retries): try: response = requests.get(url) if response.status_code == 200: output = 'true' else: raise except Exception as e: if i < retries: print('connect retry:' + str(i + 1)) print('error: ' + e.message) continue else: raise break return output def __init__(self): import socket retries = 3 for i in range(retries): try: self.__ip_address = socket.gethostbyname("xxx-vpc.cn-shanghai.aliyuncs.com") print(self.__ip_address) except socket.gaierror as e: print('Failed to resolv domain' + e.strerror) if i < retries: print('resolv domain retry:' + str(i + 1)) continue else: raise break