MaxCompute Spark開發指南
MaxCompute Spark 開發指南
0. 概述
本文件面向需要使用 MaxCompute Spark 進行開發的使用者使用。本指南主要適用於具備有 Spark 開發經驗的開發人員。
MaxCompute Spark 是 MaxCompute 提供的相容開源的 Spark 計算服務,它在統一的計算資源和資料集許可權體系之上,提供 Spark 計算框架,支援使用者以熟悉的開發使用方式提交執行 Spark 作業,以滿足更豐富的資料處理分析場景。
本文將重點介紹 MaxCompute Spark 能夠支撐的應用場景,同時說明開發的依賴條件和環境準備,重點對 Spark 作業開發、提交到 MaxCompute叢集執行、診斷進行介紹。
1. 前提條件
MaxCompute Spark是阿里雲提供的Spark on MaxCompute的解決方案,能夠讓Spark應用執行在託管的MaxCompute計算環境中。為了能夠在MaxCompute環境中安全地執行Spark作業,MaxCompute提供了以下SDK和MaxCompute Spark定製釋出包。
- SDK定位於開源應用接入MaxCompute SDK
提供了整合所需的API說明以及相關功能Demo,使用者可以基於專案提供的Spark-1.x以及Spark-2.x的example專案構建自己的應用,並且提交到MaxCompute叢集上。
- MaxCompute Spark客戶端釋出包
集成了MaxCompute認證功功能,作為客戶端工具,用於通過Spark-submit方式提交作業到MaxCompute專案中執行,目前提供了面向Spark1.x和Spark2.x的2個釋出包:spark-1.6.3和spark-2.3.0
SDK在開發時,可以通過配置Maven依賴進行引用。Spark客戶端需要根據開發的Spark版本,提前下載。如,需要開發Spark1.x應用,應下載spark-1.6.3版本客戶端;如需開發Spark2.x應用,應下載spark-2.3.0客戶端。
2. 開發環境準備
2.1 Maxcompute Spark 客戶端準備
MaxCompute Spark釋出包:集成了MaxCompute認證功功能,作為客戶端工具,用於通過Spark-submit方式提交作業到MaxCompute專案中執行,目前提供了面向Spark1.x和Spark2.x的2個釋出包:
請根據需要開發的Spark版本,選擇合適的版本下載並解壓Maxcompute Spark釋出包。
2.2 設定環境變數
JAVA_HOME設定
# 儘量使用 JDK 1.7+
# 1.8+ 最佳
export JAVA_HOME=/path/to/jdk
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
SPARK_HOME設定
export SPARK_HOME=/path/to/spark_extracted_package
export PATH=$SPARK_HOME/bin:$PATH
2.3 設定 Spark-defaults.conf
在$SPARK_HOME/conf
路徑下存在spark-defaults.conf.template檔案,這個可以作為spark-defaults.conf的模版,需要在該檔案中設定MaxCompute相關的賬號資訊後,才可以提交Spark任務到MaxCompute。預設配置內容如下,將空白部分根據實際的賬號資訊填上即可,其餘的配置可以保持不變。
# MaxCompute賬號資訊
spark.hadoop.odps.project.name =
spark.hadoop.odps.access.id =
spark.hadoop.odps.access.key =
# 以下配置保持不變
spark.sql.catalogImplementation=odps
spark.hadoop.odps.task.major.version = cupid_v2
spark.hadoop.odps.cupid.container.image.enable = true
spark.hadoop.odps.cupid.container.vm.engine.type = hyper
spark.hadoop.odps.end.point = http://service.cn.maxcompute.aliyun.com/api
spark.hadoop.odps.runtime.end.point = http://service.cn.maxcompute.aliyun-inc.com/api
3. 訪問 MaxCompute 表所需依賴
若作業需要訪問MaxCompute表,需要依賴odps-spark-datasource模組,本節介紹如何把該依賴編譯安裝到本地maven倉庫;若無需訪問可直接跳過。
- git clone程式碼,github地址: https://github.com/aliyun/aliyun-cupid-sdk/tree/3.3.2-public
#git clone [email protected]:aliyun/aliyun-cupid-sdk.git
- 編譯模組
#cd ${path to aliyun-cupid-sdk}
#git checkout 3.3.2-public
// 編譯並安裝cupid-sdk
#cd ${path to aliyun-cupid-sdk}/core/cupid-sdk/
#mvn clean install -DskipTests
// 編譯並安裝datasource。依賴cupid-sdk
// for spark-2.x
# cd ${path to aliyun-cupid-sdk}/spark/spark-2.x/datasource
# mvn clean install -DskipTests
// for spark-1.x
# cd ${path to aliyun-cupid-sdk}/spark/spark-1.x/datasource
#mvn clean install -DskipTests
- 新增依賴
<!-- Spark-1.x請依賴此模組 -->
<dependency>
<groupId>com.aliyun.odps</groupId>
<artifactId>odps-spark-datasource_2.10</artifactId>
<version>3.3.2-public</version>
</dependency>
<!-- Spark-2.x請依賴此模組 -->
<dependency>
<groupId>com.aliyun.odps</groupId>
<artifactId>odps-spark-datasource_2.11</artifactId>
<version>3.3.2-public</version>
</dependency>
4. OSS 依賴
若作業需要訪問OSS,直接新增以下依賴即可
<dependency>
<groupId>com.aliyun.odps</groupId>
<artifactId>hadoop-fs-oss</artifactId>
<version>3.3.2-public</version>
</dependency>
5. 應用開發
MaxCompute產品提供了兩個應用構建的模版,使用者可以基於此模版進行開發,最後統一構建整個專案後用生成的應用包即可直接提交到MaxCompute叢集上執行Spark應用。
5.1 通過模版構建應用
MaxCompute Spark提供兩個應用構建模版,使用者可以基於此模版進行開發,最後統一構建整個專案後用生成的應用包即可直接提交到MaxCompute叢集上執行Spark應用。首先需要把程式碼clone下來
#git clone [email protected]:aliyun/aliyun-cupid-sdk.git
#cd aliyun-cupid-sdk
#checkout 3.3.2-public
#cd archetypes
// for Spark-1.x
sh Create-AliSpark-1.x-APP.sh spark-1.x-demo /tmp
// for Spark-2.x
Create-AliSpark-2.x-APP.sh spark-2.x-demo /tmp
以上命令會在/tmp目錄下建立名為 spark-1.x-demo(spark-2.x-demo)的maven project,執行以下命令進行編譯和提交作業:
#cd /tmp/spark-2.x/demo
#mvn clean package
// 提交作業
$SPARK_HOME/bin/spark-submit \
--master yarn-cluster \
--class SparkPi \
/tmp/spark-2.x-demo/target/AliSpark-2.x-quickstart-1.0-SNAPSHOT-shaded.jar
# Usage: sh Create-AliSpark-2.x-APP.sh <app_name> <target_path>
sh Create-AliSpark-2.x-APP.sh spark-2.x-demo /tmp/
cd /tmp/spark-2.x-demo
mvn clean package
# 冒煙測試
# 1 利用編譯出來的shaded jar包
# 2 按照文件所示下載MaxCompute Spark客戶端
# 3 參考文件”置環境變數”指引,填寫MaxCompute專案相關配置項
# 執行spark-submit命令 如下
$SPARK_HOME/bin/spark-submit \
--master yarn-cluster \
--class SparkPi \
/tmp/spark-2.x-demo/target/AliSpark-2.x-quickstart-1.0-SNAPSHOT-shaded.jar
5.2 Java/Scala 開發樣例
Spark-1.x
pom.xml 須知
請注意 使用者構建Spark應用的時候,由於是用MaxCompute提供的Spark客戶端去提交應用,故需要注意一些依賴scope的定義
- spark-core spark-sql等所有spark社群釋出的包,用provided scope
- odps-spark-datasource 用預設的compile scope
<!-- spark相關依賴, provided -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_${scala.binary.version}</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_${scala.binary.version}</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_${scala.binary.version}</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
<!-- datasource依賴, 用於訪問MaxCompute表 -->
<dependency>
<groupId>com.aliyun.odps</groupId>
<artifactId>odps-spark-datasource_${scala.binary.version}</artifactId>
<version>3.3.2-public</version>
</dependency>
案例說明
WordCount
提交方式
Step 1. build aliyun-cupid-sdk
Step 2. properly set spark.defaults.conf
Step 3. bin/spark-submit --master yarn-cluster --class \
com.aliyun.odps.spark.examples.WordCount \
${path to aliyun-cupid-sdk}/spark/spark-1.x/spark-examples/target/spark-examples_2.10-version-shaded.jar
Spark-SQL on MaxCompute Table
提交方式
# 執行可能會報Table Not Found的異常,因為使用者的MaxCompute Project中沒有程式碼中指定的表
# 可以參考程式碼中的各種介面,實現對應Table的SparkSQL應用
Step 1. build aliyun-cupid-sdk
Step 2. properly set spark.defaults.conf
Step 3. bin/spark-submit --master yarn-cluster --class \
com.aliyun.odps.spark.examples.sparksql.SparkSQL \
${path to aliyun-cupid-sdk}/spark/spark-1.x/spark-examples/target/spark-examples_2.10-version-shaded.jar
GraphX PageRank
提交方式
Step 1. build aliyun-cupid-sdk
Step 2. properly set spark.defaults.conf
Step 3. bin/spark-submit --master yarn-cluster --class \
com.aliyun.odps.spark.examples.graphx.PageRank \
${path to aliyun-cupid-sdk}/spark/spark-1.x/spark-examples/target/spark-examples_2.10-version-shaded.jar
Mllib Kmeans-ON-OSS
提交方式
# 程式碼中的OSS賬號資訊相關需要填上,再編譯提交
conf.set("spark.hadoop.fs.oss.accessKeyId", "***")
conf.set("spark.hadoop.fs.oss.accessKeySecret", "***")
conf.set("spark.hadoop.fs.oss.endpoint", "oss-cn-hangzhou-zmf.aliyuncs.com")
Step 1. build aliyun-cupid-sdk
Step 2. properly set spark.defaults.conf
Step 3. bin/spark-submit --master yarn-cluster --class \
com.aliyun.odps.spark.examples.mllib.KmeansModelSaveToOss \
${path to aliyun-cupid-sdk}/spark/spark-1.x/spark-examples/target/spark-examples_2.10-version-shaded.jar
OSS UnstructuredData
提交方式
# 程式碼中的OSS賬號資訊相關需要填上,再編譯提交
conf.set("spark.hadoop.fs.oss.accessKeyId", "***")
conf.set("spark.hadoop.fs.oss.accessKeySecret", "***")
conf.set("spark.hadoop.fs.oss.endpoint", "oss-cn-hangzhou-zmf.aliyuncs.com")
Step 1. build aliyun-cupid-sdk
Step 2. properly set spark.defaults.conf
Step 3. bin/spark-submit --master yarn-cluster --class \
com.aliyun.odps.spark.examples.oss.SparkUnstructuredDataCompute \
${path to aliyun-cupid-sdk}/spark/spark-1.x/spark-examples/target/spark-examples_2.10-version-shaded.jar
Spark-2.x
pom.xml 須知
請注意 使用者構建Spark應用的時候,由於是用MaxCompute提供的Spark客戶端去提交應用,故需要注意一些依賴scope的定義
- spark-core spark-sql等所有spark社群釋出的包,用provided scope
- odps-spark-datasource 用預設的compile scope
<!-- spark相關依賴, provided -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_${scala.binary.version}</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_${scala.binary.version}</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_${scala.binary.version}</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.aliyun.odps</groupId>
<artifactId>cupid-sdk</artifactId>
<scope>provided</scope>
</dependency>
<!-- datasource依賴, 用於訪問MaxCompute表 -->
<dependency>
<groupId>com.aliyun.odps</groupId>
<artifactId>odps-spark-datasource_${scala.binary.version}</artifactId>
<version>3.3.2-public</version>
</dependency>
案例說明
WordCount
提交方式
Step 1. build aliyun-cupid-sdk
Step 2. properly set spark.defaults.conf
Step 3. bin/spark-submit --master yarn-cluster --class \
com.aliyun.odps.spark.examples.WordCount \
${path to aliyun-cupid-sdk}/spark/spark-2.x/spark-examples/target/spark-examples_2.11-version-shaded.jar
Spark-SQL 操作 MaxCompute 表
提交方式
# 執行可能會報Table Not Found的異常,因為使用者的MaxCompute Project中沒有程式碼中指定的表
# 可以參考程式碼中的各種介面,實現對應Table的SparkSQL應用
Step 1. build aliyun-cupid-sdk
Step 2. properly set spark.defaults.conf
Step 3. bin/spark-submit --master yarn-cluster --class \
com.aliyun.odps.spark.examples.sparksql.SparkSQL \
${path to aliyun-cupid-sdk}/spark/spark-2.x/spark-examples/target/spark-examples_2.11-version-shaded.jar
GraphX PageRank
提交方式
Step 1. build aliyun-cupid-sdk
Step 2. properly set spark.defaults.conf
Step 3. bin/spark-submit --master yarn-cluster --class \
com.aliyun.odps.spark.examples.graphx.PageRank \
${path to aliyun-cupid-sdk}/spark/spark-2.x/spark-examples/target/spark-examples_2.11-version-shaded.jar
Mllib Kmeans-ON-OSS
KmeansModelSaveToOss
提交方式
# 程式碼中的OSS賬號資訊相關需要填上,再編譯提交
val spark = SparkSession
.builder()
.config("spark.hadoop.fs.oss.accessKeyId", "***")
.config("spark.hadoop.fs.oss.accessKeySecret", "***")
.config("spark.hadoop.fs.oss.endpoint", "oss-cn-hangzhou-zmf.aliyuncs.com")
.appName("KmeansModelSaveToOss")
.getOrCreate()
Step 1. build aliyun-cupid-sdk
Step 2. properly set spark.defaults.conf
Step 3. bin/spark-submit --master yarn-cluster --class \
com.aliyun.odps.spark.examples.mllib.KmeansModelSaveToOss \
${path to aliyun-cupid-sdk}/spark/spark-2.x/spark-examples/target/spark-examples_2.11-version-shaded.jar
OSS UnstructuredData
SparkUnstructuredDataCompute
提交方式
# 程式碼中的OSS賬號資訊相關需要填上,再編譯提交
val spark = SparkSession
.builder()
.config("spark.hadoop.fs.oss.accessKeyId", "***")
.config("spark.hadoop.fs.oss.accessKeySecret", "***")
.config("spark.hadoop.fs.oss.endpoint", "oss-cn-hangzhou-zmf.aliyuncs.com")
.appName("SparkUnstructuredDataCompute")
.getOrCreate()
Step 1. build aliyun-cupid-sdk
Step 2. properly set spark.defaults.conf
Step 3. bin/spark-submit --master yarn-cluster --class \
com.aliyun.odps.spark.examples.oss.SparkUnstructuredDataCompute \
${path to aliyun-cupid-sdk}/spark/spark-2.x/spark-examples/target/spark-examples_2.11-version-shaded.jar
PySpark 開發樣例
需要檔案
若需要訪問MaxCompute表,則需要參考第三節(訪問MaxCompute 表所需依賴 )編譯datasource包
SparkSQL 應用示例 (spark1.6)
from pyspark import SparkContext, SparkConf
from pyspark.sql import OdpsContext
if __name__ == '__main__':
conf = SparkConf().setAppName("odps_pyspark")
sc = SparkContext(conf=conf)
sql_context = OdpsContext(sc)
df = sql_context.sql("select id, value from cupid_wordcount")
df.printSchema()
df.show(200)
df_2 = sql_context.sql("select id, value from cupid_partition_table1 where pt1 = 'part1'")
df_2.show(200)
#Create Drop Table
sql_context.sql("create table TestCtas as select * from cupid_wordcount").show()
sql_context.sql("drop table TestCtas").show()
提交執行:
./bin/spark-submit \
--jars ${path to odps-spark-datasource_2.10-3.3.2-public.jar} \
example.py
SparkSQL 應用示例( spark2.3 )
from pyspark.sql import SparkSession
if __name__ == '__main__':
spark = SparkSession.builder.appName("spark sql").getOrCreate()
df = spark.sql("select id, value from cupid_wordcount")
df.printSchema()
df.show(10, 200)
df_2 = spark.sql("SELECT product,category,revenue FROM (SELECT product,category,revenue, dense_rank() OVER (PARTITION BY category ORDER BY revenue DESC) as rank FROM productRevenue) tmp WHERE rank <= 2");
df_2.printSchema()
df_2.show(10, 200)
df_3 = spark.sql("select id, value from cupid_partition_table1 where pt1 = 'part1'")
df_3.show(10, 200)
#Create Drop Table
spark.sql("create table TestCtas as select * from cupid_wordcount").show()
spark.sql("drop table TestCtas").show()
提交執行:
spark-submit --master yarn-cluster \
--jars ${path to odps-spark-datasource_2.11-3.3.2-public.jar \
example.py
6. 通過 Spark 訪問 VPC 環境內服務
對於使用者使用Spark on MaxCompute對VPC環境內的RDS、Redis、ECS主機部署的服務等,受限於VPC的訪問限制,暫時還無法訪問,即將在近期支援。
7. 如何把開源 Spark 程式碼遷移到 Spark on MaxCompute
case1. 作業無需訪問MaxCompute 表和OSS
使用者jar包可直接執行,參照第二節準備開發環境和修改配置。注意,對於spark或hadoop的依賴必須設成provided。
case2. 作業需要訪問MaxCompute 表
參考第三節編譯datasource並安裝到本地maven倉庫,在pom中新增依賴後重新打包即可。
case3. 作業需要訪問OSS
參考第四節在pom中新增依賴後重新打包即可。
8. 任務提交執行
目前MaxCompute Spark支援以下幾種執行方式:local模式,cluster模式,和在DataWorks中執行模式。
8.1 Local 模式
local模式主要是讓使用者能夠方便的除錯應用程式碼,使用方式跟社群相同,我們添加了用tunnel讀寫ODPS表的功能。使用者可以在ide和命令列中使用該模式,需要新增配置spark.master=local[N],其中N表示執行該模式所需要的cpu資源。此外,local模式下的讀寫表是通過讀寫tunnel完成的,需要在Spark-defaults.conf中增加tunnel配置項(請根據MaxCompute專案所在的region及網路環境填寫對應的 Tunnel Endpoint 地址 ):tunnel_end_point=http://dt.cn-beijing.maxcompute.aliyun.com。命令列執行該模式的方式如下:
1.bin/spark-submit --master local[4] \
--class com.aliyun.odps.spark.examples.SparkPi \
${path to aliyun-cupid-sdk}/spark/spark-2.x/spark-examples/target/spark-examples_2.11-version-shaded.jar
8.2 Cluster 模式
在Cluster模式中,使用者需要指定自定義程式入口Main,Main結束(Success or Fail)spark job就會結束。使用場景適合於離線作業,可以與阿里雲DataWorks產品結合進行作業排程。命令列提交方式如下:
1.bin/spark-submit --master yarn-cluster \
–class SparkPi \
${ProjectRoot}/spark/spark-2.x/spark-examples/target/spark-examples_2.11-version-shaded.jar
8.3 DataWorks 執行模式
使用者可以在DataWorks中執行MaxCompute Spark離線作業(cluster模式),以方便與其他型別執行節點整合和排程。
-
-
使用者需要在DataWorks的業務流程中上傳並提交(單擊提交按鈕)資源:
-
第二步:在建立的業務流程中,從資料開發元件中選擇ODPS Spark節點。
雙擊拖拽到工作流的Spark節點,對Spark作業進行任務定義:
選擇Spark的版本、任務使用的開發語言,並指定任務所使用的資原始檔。這裡的資原始檔就是第一步在業務流程中預先上傳併發布的資原始檔。同時,您還可以指定提交作業時的配置項,如executor的數量、記憶體大小等配置項。同時設定配置項:spark.hadoop.odps.cupid.webproxy.endpoint (取值填寫專案所在region的endpoint,如http://service.cn.maxcompute.aliyun-inc.com/api)、spark.hadoop.odps.moye.trackurl.host(取值填寫:http://jobview.odps.aliyun.com)
以便能夠檢視日誌中打印出的jobview資訊。
手動執行Spark節點,可以檢視該任務的執行日誌,從打印出來的日誌中可以獲取該任務的logview和jobview的url,編譯進一步檢視與診斷。
Spark作業定義完成後,即可以在業務流程中對不同型別服務進行編排、統一排程執行。
-
使用者需要在DataWorks的業務流程中上傳並提交(單擊提交按鈕)資源:
作業診斷
提交作業後,需要根據作業日誌來檢查作業是否正常提交併執行,MaxCompute對於Spark作業提供了Logview工具以及Spark Web-UI來幫助開發者進行作業診斷。
例如,通過Spark-submit方式(dataworks執行spark任務時也會產生相應日誌)提交作業,在作業日誌中會列印以下關鍵內容:
cd $SPARK_HOME
bin/spark-submit --master yarn-cluster --class SparkPi /tmp/spark-2.x-demo/target/AliSpark-2.x-quickstart-1.0-SNAPSHOT-shaded.jar
作業提交成功後,MaxCompute會建立一個instance,在日誌中會列印instance的logview:
19/01/05 20:36:47 INFO YarnClientImplUtil: logview url: http://logview.odps.aliyun.com/logview/?h=http://service.cn.maxcompute.aliyun.com/api&p=qn_beijing&i=20190105123647703gpqn26pr2&token=eG94TG1iTkZDSFErc1ZPcUZyTTdSWWQ3UE44PSxPRFBTX09CTzoxODc1NjUzNjIyNTQzMDYxLDE1NDY5NTEwMDcseyJTdGF0ZW1lbnQiOlt7IkFjdGlvbiI6WyJvZHBzOlJlYWQiXSwiRWZmZWN0IjoiQWxsb3ciLCJSZXNvdXJjZSI6WyJhY3M6b2RwczoqOnByb2plY3RzL3FuX2JlaWppbmcvaW5zdGFuY2VzLzIwMTkwMTA1MTIzNjQ3NzAzZ3BxbjI2cHIyIl19XSwiVmVyc2lvbiI6IjEifQ==
成功標準: <看到以下輸出,可能會有其他日誌一併輸出>
19/01/05 20:37:34 INFO Client:
client token: N/A
diagnostics: N/A
ApplicationMaster host: 11.220.203.36
ApplicationMaster RPC port: 30002
queue: queue
start time: 1546691807945
final status: SUCCEEDED
tracking URL: http://jobview.odps.aliyun.com/proxyview/jobview/?h=http://service.cn.maxcompute.aliyun-inc.com/api&p=project_name&i=20190105123647703gpqn26pr2&t=spark&id=application_1546691794888_113905562&metaname=20190105123647703gpqn26pr2&token=TjhlQWswZTRpYWN2L3RuK25VeE5LVy9xSUNjPSxPRFBTX09CTzoxODc1NjUzNjIyNTQzMDYxLDE1NDY5NTEwMzcseyJTdGF0ZW1lbnQiOlt7IkFjdGlvbiI6WyJvZHBzOlJlYWQiXSwiRWZmZWN0IjoiQWxsb3ciLCJSZXNvdXJjZSI6WyJhY3M6b2RwczoqOnByb2plY3RzL3FuX2JlaWppbmcvaW5zdGFuY2VzLzIwMTkwMTA1MTIzNjQ3NzAzZ3BxbjI2cHIyIl19XSwiVmVyc2lvbiI6IjEifQ==
-
通過日誌輸出的logview在瀏覽器中可以檢視CUPID型別的任務執行的基本資訊。
單擊TaskName為
master-0任務條,在下方FuxiInstance欄中,通過
All按鈕過濾後,
單擊TempRoot的StdOut按鈕可以檢視SparkPi的輸出結果:
- 日誌中打印出上述的TrackingUrl,表示您的作業已經提交到MaxCompute叢集,這個TrackingUrl非常關鍵,它既是SparkWebUI,也是HistoryServer的Url。在瀏覽器中開啟這個Url,可以追蹤Spark作業的執行情況。
單擊driver的stdout即可以檢視Spark作業的輸出內容。
常見問題
本小節總結Spark使用過程中的常見問題。
-
Q:spark-defaults.conf提供的id、key有問題,提示:
A:請檢查spark-defaults.conf提供的id、key和在阿里雲官網管理控制檯 使用者資訊管理 中的AccessKey ID、Access Key Secret是否一致。
Stack:
com.aliyun.odps.OdpsException: ODPS-0410042:
Invalid signature value - User signature dose not match
-
Q:提示許可權不足
A:請project owner授權grant resource的read以及create許可權。
Stack:
com.aliyun.odps.OdpsException: ODPS-0420095:
Access Denied - Authorization Failed [4019], You have NO privilege 'odps:CreateResource' on {acs:odps:*:projects/*}
-
Q:專案未支援Spark任務執行,提示:
A:首先需要確認專案所在的region中,是否已經提供了MaxCompute Spark服務。
Exception in thread "main" org.apache.hadoop.yarn.exceptions.YarnException: com.aliyun.odps.OdpsException: ODPS-0420095: Access Denied - The task is not in release range: CUPID