日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

使用outputstream写到指定位置_MaxCompute Spark与Spark SQL对比分析及使用注意事项

發(fā)布時(shí)間:2025/3/15 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用outputstream写到指定位置_MaxCompute Spark与Spark SQL对比分析及使用注意事项 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

以下內(nèi)容根據(jù)演講視頻以及PPT整理而成。
本次分享主要圍繞以下三個(gè)方面:

一、功能特性
二、代碼開發(fā)
三、DataWorks模式

一、功能特性

1.Spark部署模式
Spark開源文檔中表明部署模式支持幾種部署模式,如stand alone模式、on yarn模式、on k8s模式等。但是其中并不包括Spark on MaxCompute模式。Spark on MaxCompute其實(shí)是 MaxCompute平臺(tái)對(duì)開源的Spark做的兼容支持,使得 MaxCompute平臺(tái)得以支持運(yùn)行Spark的作業(yè)。在部署的集群方式上,on yarn、on k8s集群云上部署時(shí)需要購(gòu)買ECS部署Hadoop集群或者容器集群,或者是使用阿里云的產(chǎn)品,如EMR、容器服務(wù)。與用于自己搭建的Hadoop環(huán)境(CDH或者EMR的環(huán)境)對(duì)比時(shí),自建的環(huán)境需要登錄到集群中,進(jìn)行查詢和維護(hù)的工作,但在MaxCompute平臺(tái)中,使用側(cè)無(wú)法登陸,無(wú)需關(guān)心集群的運(yùn)維等操作,相比on yarn等開源模式只需將精力放在Spark業(yè)務(wù)邏輯開發(fā)上。當(dāng)用戶部署完集群去客戶端提交作業(yè)時(shí),開源模式是從官網(wǎng)下載Spark客戶端,通過(guò)Spark-submit提交作業(yè)。但開源的Spark-submit客戶端無(wú)法到MaxCompute平臺(tái)中提交作業(yè)。這時(shí)則需要注意使用MaxCompute中Github上提供的Spark,部署開發(fā)環(huán)境,并在開發(fā)本地處理測(cè)試提交的工作。

2.支持的數(shù)據(jù)源Spark on yarn/K8s限制條件:首先,開源模式需要確認(rèn)支持?jǐn)?shù)據(jù)源操作的jar包是否存在。在常規(guī)做Spark作業(yè)開發(fā)分析時(shí),需要需要考慮數(shù)據(jù)的來(lái)源以及去向,即Spark支不支持對(duì)對(duì)應(yīng)的數(shù)據(jù)庫(kù)進(jìn)行讀寫訪問(wèn)。在開源開發(fā)模式下,需要將對(duì)應(yīng)數(shù)據(jù)源支持的jar包加進(jìn)去,在代碼引用時(shí)則可以對(duì)對(duì)應(yīng)的數(shù)據(jù)庫(kù)進(jìn)行讀寫訪問(wèn)。其次,開源模式還需要保證平臺(tái)環(huán)境網(wǎng)絡(luò)是否可打通。盡管代碼層面上的接口都可以調(diào)用訪問(wèn)對(duì)應(yīng)的庫(kù),但還需要檢查Spark集群所運(yùn)行的環(huán)境。如果作業(yè)是在集群中運(yùn)行,在Hadoop中將作業(yè)提交上去,Work接點(diǎn)里面跑出來(lái),在Spark并發(fā)跑的時(shí)候,拉取數(shù)據(jù)時(shí)要保證集群能訪問(wèn)到數(shù)據(jù)庫(kù),否則作業(yè)里會(huì)報(bào)連接超時(shí)的錯(cuò)誤。云上環(huán)境網(wǎng)絡(luò)連通上如常見(jiàn)的云上ECS搭建、自建Hadoop、k8s容器服務(wù)、EMR或者常見(jiàn)的VPC環(huán)境。如果VPC環(huán)境下集群和數(shù)據(jù)庫(kù)之間要在網(wǎng)絡(luò)評(píng)估的話,需要在同一個(gè)VPC下,否則默認(rèn)情況下內(nèi)網(wǎng)不通。

Spark on MaxCompute限制條件:若用戶需要將一個(gè)作業(yè)遷到MaxCompute運(yùn)行,需要檢查MaxCompute是否支持所要訪問(wèn)的數(shù)據(jù)源,只有支持了,才能遷到MaxCompute上并借助其分布式能力讓作業(yè)運(yùn)行起來(lái)。目前MaxCompute支持訪問(wèn)的數(shù)據(jù)源包括oss、VPC下的ECS、RDS、redis等。基本上云上VPC下環(huán)境的數(shù)據(jù)源都支持。用戶可從文檔中獲取具體支持?jǐn)?shù)據(jù)源的所有信息,以及做訪問(wèn)配置時(shí)的配置方式等信息。

2.提交方式
開源模式在Spark客戶端提交作業(yè)時(shí),開發(fā)完成后需要在本地運(yùn)行測(cè)試,運(yùn)行測(cè)試的時(shí)候可以以Local模式運(yùn)行,在集群運(yùn)行時(shí)用Cluster的方式,做交互式時(shí)用Client的方式。Spark on MaxCompute同樣也支持這三種方式,只有有些點(diǎn)與開源不同。首先,使用Spark on MaxCompute的客戶端做MaxCompute表時(shí),代碼中計(jì)劃訪問(wèn)MaxCompute表,拉取RDD數(shù)據(jù)進(jìn)行分析。隨即在本地測(cè)試時(shí)將MaxCompute表里的數(shù)據(jù)下載下來(lái),再進(jìn)行處理。此時(shí)如果MaxCompute表較大的話,拉取數(shù)據(jù)的時(shí)間會(huì)比較長(zhǎng),導(dǎo)致作業(yè)運(yùn)行的時(shí)間也會(huì)變長(zhǎng)。
其次,在測(cè)試時(shí)UDF會(huì)拉張表寫到本地的Warehouse目錄下,在下次測(cè)試使用緩存數(shù)據(jù)。但Spark on MaxCompute本地測(cè)試時(shí),都需要重新拉數(shù)據(jù)。所以針對(duì)這個(gè)特性做功能測(cè)試時(shí),在拉的取的表中選定一部分特征,或者選一些分區(qū)下載,使得數(shù)據(jù)量變少,避免將所有數(shù)據(jù)都下載再運(yùn)行作業(yè)。此外,在Client的模式下,正常開源模式中提交時(shí)客戶端Driver需要啟動(dòng),而Spark on MaxCompute在Client模式下運(yùn)行時(shí),客戶端不用啟Driver。

**二、代碼開發(fā)
1.POM配置**
在Spark業(yè)務(wù)代碼開發(fā)時(shí),Spark on MaxCompute代碼開發(fā)可以參考對(duì)應(yīng)Github中的POM配置文件https://Github.com/aliyun/MaxCompute-Spark/blob/master/spark-2.x/pom.xml
POM文件配置完成后編譯或者運(yùn)行代碼時(shí)會(huì)出現(xiàn)版本沖突,運(yùn)行不過(guò)或者編譯不通過(guò)等問(wèn)題。這時(shí)需要注意的兩個(gè)點(diǎn),首先要注意spark和scala的版本,需要在在POM文件中指定Spark版本,Cupid版本和Scala的版本。對(duì)應(yīng)的版本可以參考下圖。此外,需要注意Scope配置是Provided類型。在涉及到Spark on MaxCompute資源包引用時(shí),Scope的配置需要是Provided類型,否則編譯時(shí)會(huì)出現(xiàn)問(wèn)題。

2.Jar包引用
下圖是POM示例中關(guān)于ODPS數(shù)據(jù)源訪問(wèn)相關(guān)的jar包引用代碼。關(guān)于Cupid-sdk,Spark底層其實(shí)是在Cupid平臺(tái)運(yùn)行的,由Cupid再去調(diào)用底層的調(diào)度資源進(jìn)行協(xié)調(diào),所以在做開發(fā)時(shí)Cupid版本需要引用進(jìn)來(lái)。此外,如果在Spark需要訪問(wèn)oss數(shù)據(jù)源,需要將對(duì)應(yīng)的jar包引用進(jìn)來(lái)。odps-spark-datasource是對(duì)應(yīng)ODPS支持源的jar包。

2.使用建議建議使用SparkSql,不要使用ODPSops:在前期開發(fā)時(shí),如果需要訪問(wèn)ODPS結(jié)構(gòu)化數(shù)據(jù),建議使用SparkSql方式,推薦ODPSops方式。SparkSession包含很多配置,如下圖,但不建議將配置全部寫到代碼里,只需制定常見(jiàn)參數(shù),如生效邏輯,代碼,提交和配置文件等。如果底層在Cupid平臺(tái)運(yùn)行,需要注意部分參數(shù)要在程序加載之前進(jìn)行初始化,如果等程序加載好之后再進(jìn)行參數(shù)初始化就無(wú)法生效,既代碼里面寫的部分參數(shù)最終運(yùn)行起來(lái)會(huì)失效。所以建議線上運(yùn)行時(shí),將SparkSession代碼中配置的參數(shù)寫到Spark節(jié)點(diǎn)配置中。如此,作業(yè)開始運(yùn)行之前,便會(huì)將對(duì)應(yīng)的參數(shù)配置好,運(yùn)行之前初始化好環(huán)境,讓對(duì)應(yīng)的參數(shù)生效。

線上運(yùn)行時(shí)SparkSession代碼中參數(shù)寫到Spark節(jié)點(diǎn):Spark on MaxCompute在讀MaxCompute表時(shí),會(huì)被提示此項(xiàng)目不存在,如果確定項(xiàng)目的確存在,需要指定運(yùn)行時(shí)端點(diǎn)的信息。通過(guò)運(yùn)行時(shí)端點(diǎn)信息連接對(duì)應(yīng)ODPS的元數(shù)據(jù)庫(kù),查詢對(duì)應(yīng)元數(shù)據(jù)是否來(lái)自對(duì)應(yīng)的表,并查詢項(xiàng)目是否存在。配置spark.hadoop.odps.runtime.end.point:建議在做Spark節(jié)點(diǎn)配置時(shí),加上runtime。

引用jar資源使用spark.hadoop.odps.cupid.resources:當(dāng)需要引用第三方的包,但是MaxCompute中并不具備這些包時(shí),可以利用FatJar的方式運(yùn)行。異或在直接編譯完后,在需要引用一些其它jar包資源時(shí),通過(guò)Cupid Resources參數(shù)引用。對(duì)應(yīng)的jar包需要以資源方式上傳到MaxCompute中。

三、DataWorks模式
寫好Spark作業(yè)后本地測(cè)試都正常,且要與其它作業(yè)形成工作流時(shí)需要添加依賴,還需要定時(shí)調(diào)度,這時(shí)需要將Spark作業(yè)部署到DataWorks中。在DataWorks中部署時(shí)需要進(jìn)行以下幾步操作。
**1.操作流程
創(chuàng)建spark節(jié)點(diǎn):**找到DataWorks界面,找到對(duì)應(yīng)的項(xiàng),找到一個(gè)工作流,新建Spark節(jié)點(diǎn)。

配置節(jié)點(diǎn)參數(shù):新建的Spark節(jié)點(diǎn)中需要進(jìn)行參數(shù)的配置。選擇Spark版本,如Spark2.x。選擇開發(fā)語(yǔ)言,如JavaScala或者Python。通過(guò)創(chuàng)建資源的方式將對(duì)應(yīng)的jar包進(jìn)行導(dǎo)入。再選擇主jar包資源,如spark.oss.jar。再配置一些參數(shù),如accessKey,指定runtime的endpoint,指定Cupid版本,通過(guò)domainlist指定需要訪問(wèn)VPC的數(shù)據(jù)源。以及Main Class表明main所在的組類。其余的參數(shù)可以通過(guò)參數(shù)選項(xiàng)進(jìn)行自定義設(shè)置,如指定定時(shí)調(diào)度等。進(jìn)行測(cè)試運(yùn)行:參數(shù)配置好后,保存,執(zhí)行測(cè)試運(yùn)行。可通過(guò)刷新日志,查看初始化的配置,如當(dāng)前作業(yè)拉到了哪個(gè)項(xiàng)目。此時(shí)會(huì)生成Logview,與SQL作業(yè)類似,其中包含master節(jié)點(diǎn)和worker節(jié)點(diǎn)。

提交發(fā)布:測(cè)試完成后,首先需要將Spark節(jié)點(diǎn)進(jìn)行發(fā)布,才可以在生產(chǎn)環(huán)境正常的調(diào)度。在生產(chǎn)環(huán)境的運(yùn)維環(huán)境下可以找到此節(jié)點(diǎn)。如果沒(méi)有發(fā)布,只能在開發(fā)環(huán)境下看到此作業(yè)節(jié)點(diǎn)。

但這時(shí)如果只發(fā)布Spark節(jié)點(diǎn)作業(yè),在生產(chǎn)環(huán)境測(cè)試會(huì)報(bào)錯(cuò)。因?yàn)閰?shù)主jar包還沒(méi)有發(fā)布,需要在測(cè)試環(huán)境下進(jìn)行發(fā)布。所以需要注意,所引用的jar包都需要進(jìn)行手動(dòng)的發(fā)布。此外如果需要引入大的jar包,超過(guò)100M,可以通過(guò)命令行方式上傳到MaxCompute開發(fā)和測(cè)試環(huán)境中。但這時(shí)可能無(wú)法在DataWorks界面看到這個(gè)包。但可以通過(guò)反向添加到DataWorks中。


查看更多:https://yqh.aliyun.com/detail/6402?utm_content=g_1000106255

上云就看云棲號(hào):更多云資訊,上云案例,最佳實(shí)踐,產(chǎn)品入門,訪問(wèn):https://yqh.aliyun.com/

總結(jié)

以上是生活随笔為你收集整理的使用outputstream写到指定位置_MaxCompute Spark与Spark SQL对比分析及使用注意事项的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。