使用outputstream写到指定位置_MaxCompute Spark与Spark SQL对比分析及使用注意事项
以下內(nèi)容根據(jù)演講視頻以及PPT整理而成。
本次分享主要圍繞以下三個方面:
一、功能特性
二、代碼開發(fā)
三、DataWorks模式
一、功能特性
1.Spark部署模式
Spark開源文檔中表明部署模式支持幾種部署模式,如stand alone模式、on yarn模式、on k8s模式等。但是其中并不包括Spark on MaxCompute模式。Spark on MaxCompute其實是 MaxCompute平臺對開源的Spark做的兼容支持,使得 MaxCompute平臺得以支持運行Spark的作業(yè)。在部署的集群方式上,on yarn、on k8s集群云上部署時需要購買ECS部署Hadoop集群或者容器集群,或者是使用阿里云的產(chǎn)品,如EMR、容器服務(wù)。與用于自己搭建的Hadoop環(huán)境(CDH或者EMR的環(huán)境)對比時,自建的環(huán)境需要登錄到集群中,進行查詢和維護的工作,但在MaxCompute平臺中,使用側(cè)無法登陸,無需關(guān)心集群的運維等操作,相比on yarn等開源模式只需將精力放在Spark業(yè)務(wù)邏輯開發(fā)上。當用戶部署完集群去客戶端提交作業(yè)時,開源模式是從官網(wǎng)下載Spark客戶端,通過Spark-submit提交作業(yè)。但開源的Spark-submit客戶端無法到MaxCompute平臺中提交作業(yè)。這時則需要注意使用MaxCompute中Github上提供的Spark,部署開發(fā)環(huán)境,并在開發(fā)本地處理測試提交的工作。
2.支持的數(shù)據(jù)源Spark on yarn/K8s限制條件:首先,開源模式需要確認支持數(shù)據(jù)源操作的jar包是否存在。在常規(guī)做Spark作業(yè)開發(fā)分析時,需要需要考慮數(shù)據(jù)的來源以及去向,即Spark支不支持對對應(yīng)的數(shù)據(jù)庫進行讀寫訪問。在開源開發(fā)模式下,需要將對應(yīng)數(shù)據(jù)源支持的jar包加進去,在代碼引用時則可以對對應(yīng)的數(shù)據(jù)庫進行讀寫訪問。其次,開源模式還需要保證平臺環(huán)境網(wǎng)絡(luò)是否可打通。盡管代碼層面上的接口都可以調(diào)用訪問對應(yīng)的庫,但還需要檢查Spark集群所運行的環(huán)境。如果作業(yè)是在集群中運行,在Hadoop中將作業(yè)提交上去,Work接點里面跑出來,在Spark并發(fā)跑的時候,拉取數(shù)據(jù)時要保證集群能訪問到數(shù)據(jù)庫,否則作業(yè)里會報連接超時的錯誤。云上環(huán)境網(wǎng)絡(luò)連通上如常見的云上ECS搭建、自建Hadoop、k8s容器服務(wù)、EMR或者常見的VPC環(huán)境。如果VPC環(huán)境下集群和數(shù)據(jù)庫之間要在網(wǎng)絡(luò)評估的話,需要在同一個VPC下,否則默認情況下內(nèi)網(wǎng)不通。
Spark on MaxCompute限制條件:若用戶需要將一個作業(yè)遷到MaxCompute運行,需要檢查MaxCompute是否支持所要訪問的數(shù)據(jù)源,只有支持了,才能遷到MaxCompute上并借助其分布式能力讓作業(yè)運行起來。目前MaxCompute支持訪問的數(shù)據(jù)源包括oss、VPC下的ECS、RDS、redis等?;旧显粕蟅PC下環(huán)境的數(shù)據(jù)源都支持。用戶可從文檔中獲取具體支持數(shù)據(jù)源的所有信息,以及做訪問配置時的配置方式等信息。
2.提交方式
開源模式在Spark客戶端提交作業(yè)時,開發(fā)完成后需要在本地運行測試,運行測試的時候可以以Local模式運行,在集群運行時用Cluster的方式,做交互式時用Client的方式。Spark on MaxCompute同樣也支持這三種方式,只有有些點與開源不同。首先,使用Spark on MaxCompute的客戶端做MaxCompute表時,代碼中計劃訪問MaxCompute表,拉取RDD數(shù)據(jù)進行分析。隨即在本地測試時將MaxCompute表里的數(shù)據(jù)下載下來,再進行處理。此時如果MaxCompute表較大的話,拉取數(shù)據(jù)的時間會比較長,導(dǎo)致作業(yè)運行的時間也會變長。
其次,在測試時UDF會拉張表寫到本地的Warehouse目錄下,在下次測試使用緩存數(shù)據(jù)。但Spark on MaxCompute本地測試時,都需要重新拉數(shù)據(jù)。所以針對這個特性做功能測試時,在拉的取的表中選定一部分特征,或者選一些分區(qū)下載,使得數(shù)據(jù)量變少,避免將所有數(shù)據(jù)都下載再運行作業(yè)。此外,在Client的模式下,正常開源模式中提交時客戶端Driver需要啟動,而Spark on MaxCompute在Client模式下運行時,客戶端不用啟Driver。
**二、代碼開發(fā)
1.POM配置**
在Spark業(yè)務(wù)代碼開發(fā)時,Spark on MaxCompute代碼開發(fā)可以參考對應(yīng)Github中的POM配置文件https://Github.com/aliyun/MaxCompute-Spark/blob/master/spark-2.x/pom.xml
POM文件配置完成后編譯或者運行代碼時會出現(xiàn)版本沖突,運行不過或者編譯不通過等問題。這時需要注意的兩個點,首先要注意spark和scala的版本,需要在在POM文件中指定Spark版本,Cupid版本和Scala的版本。對應(yīng)的版本可以參考下圖。此外,需要注意Scope配置是Provided類型。在涉及到Spark on MaxCompute資源包引用時,Scope的配置需要是Provided類型,否則編譯時會出現(xiàn)問題。
2.Jar包引用
下圖是POM示例中關(guān)于ODPS數(shù)據(jù)源訪問相關(guān)的jar包引用代碼。關(guān)于Cupid-sdk,Spark底層其實是在Cupid平臺運行的,由Cupid再去調(diào)用底層的調(diào)度資源進行協(xié)調(diào),所以在做開發(fā)時Cupid版本需要引用進來。此外,如果在Spark需要訪問oss數(shù)據(jù)源,需要將對應(yīng)的jar包引用進來。odps-spark-datasource是對應(yīng)ODPS支持源的jar包。
2.使用建議建議使用SparkSql,不要使用ODPSops:在前期開發(fā)時,如果需要訪問ODPS結(jié)構(gòu)化數(shù)據(jù),建議使用SparkSql方式,推薦ODPSops方式。SparkSession包含很多配置,如下圖,但不建議將配置全部寫到代碼里,只需制定常見參數(shù),如生效邏輯,代碼,提交和配置文件等。如果底層在Cupid平臺運行,需要注意部分參數(shù)要在程序加載之前進行初始化,如果等程序加載好之后再進行參數(shù)初始化就無法生效,既代碼里面寫的部分參數(shù)最終運行起來會失效。所以建議線上運行時,將SparkSession代碼中配置的參數(shù)寫到Spark節(jié)點配置中。如此,作業(yè)開始運行之前,便會將對應(yīng)的參數(shù)配置好,運行之前初始化好環(huán)境,讓對應(yīng)的參數(shù)生效。
線上運行時SparkSession代碼中參數(shù)寫到Spark節(jié)點:Spark on MaxCompute在讀MaxCompute表時,會被提示此項目不存在,如果確定項目的確存在,需要指定運行時端點的信息。通過運行時端點信息連接對應(yīng)ODPS的元數(shù)據(jù)庫,查詢對應(yīng)元數(shù)據(jù)是否來自對應(yīng)的表,并查詢項目是否存在。配置spark.hadoop.odps.runtime.end.point:建議在做Spark節(jié)點配置時,加上runtime。
引用jar資源使用spark.hadoop.odps.cupid.resources:當需要引用第三方的包,但是MaxCompute中并不具備這些包時,可以利用FatJar的方式運行。異或在直接編譯完后,在需要引用一些其它jar包資源時,通過Cupid Resources參數(shù)引用。對應(yīng)的jar包需要以資源方式上傳到MaxCompute中。
三、DataWorks模式
寫好Spark作業(yè)后本地測試都正常,且要與其它作業(yè)形成工作流時需要添加依賴,還需要定時調(diào)度,這時需要將Spark作業(yè)部署到DataWorks中。在DataWorks中部署時需要進行以下幾步操作。
**1.操作流程
創(chuàng)建spark節(jié)點:**找到DataWorks界面,找到對應(yīng)的項,找到一個工作流,新建Spark節(jié)點。
配置節(jié)點參數(shù):新建的Spark節(jié)點中需要進行參數(shù)的配置。選擇Spark版本,如Spark2.x。選擇開發(fā)語言,如JavaScala或者Python。通過創(chuàng)建資源的方式將對應(yīng)的jar包進行導(dǎo)入。再選擇主jar包資源,如spark.oss.jar。再配置一些參數(shù),如accessKey,指定runtime的endpoint,指定Cupid版本,通過domainlist指定需要訪問VPC的數(shù)據(jù)源。以及Main Class表明main所在的組類。其余的參數(shù)可以通過參數(shù)選項進行自定義設(shè)置,如指定定時調(diào)度等。進行測試運行:參數(shù)配置好后,保存,執(zhí)行測試運行??赏ㄟ^刷新日志,查看初始化的配置,如當前作業(yè)拉到了哪個項目。此時會生成Logview,與SQL作業(yè)類似,其中包含master節(jié)點和worker節(jié)點。
提交發(fā)布:測試完成后,首先需要將Spark節(jié)點進行發(fā)布,才可以在生產(chǎn)環(huán)境正常的調(diào)度。在生產(chǎn)環(huán)境的運維環(huán)境下可以找到此節(jié)點。如果沒有發(fā)布,只能在開發(fā)環(huán)境下看到此作業(yè)節(jié)點。
但這時如果只發(fā)布Spark節(jié)點作業(yè),在生產(chǎn)環(huán)境測試會報錯。因為參數(shù)主jar包還沒有發(fā)布,需要在測試環(huán)境下進行發(fā)布。所以需要注意,所引用的jar包都需要進行手動的發(fā)布。此外如果需要引入大的jar包,超過100M,可以通過命令行方式上傳到MaxCompute開發(fā)和測試環(huán)境中。但這時可能無法在DataWorks界面看到這個包。但可以通過反向添加到DataWorks中。
查看更多:https://yqh.aliyun.com/detail/6402?utm_content=g_1000106255
上云就看云棲號:更多云資訊,上云案例,最佳實踐,產(chǎn)品入門,訪問:https://yqh.aliyun.com/
總結(jié)
以上是生活随笔為你收集整理的使用outputstream写到指定位置_MaxCompute Spark与Spark SQL对比分析及使用注意事项的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ThinkPHP6项目基操(8.多应用模
- 下一篇: php倒计时关闭订单,订单倒计时取消,n