全部產品
Search
文件中心

AnalyticDB:通過Spark-Submit命令列工具開發Spark應用

更新時間:Sep 25, 2024

AnalyticDB for MySQL提供Spark-Submit命令列工具,當您在通過用戶端串連叢集進行Spark開發時,需要藉助該命令列工具提交Spark應用。本文介紹如何通過AnalyticDB for MySQL的Spark-Submit命令列工具進行Spark應用開發。

前提條件

  • 叢集的產品系列為湖倉版

  • 已建立Job型資源群組。具體操作,請參見建立資源群組

  • 叢集與OSS儲存空間位於相同地區。

  • 已安裝JDK,且JDK的版本為1.8及以上版本。

注意事項

通過Spark-Submit命令列工具進行作業開發時,僅支援提交Spark Jar應用,不支援提交Spark SQL。

下載並安裝Spark-Submit

  1. 執行以下命令,下載Spark-Submit命令列工具的安裝包adb-spark-toolkit-submit-0.0.1.tar.gz

    wget https://dla003.oss-cn-hangzhou.aliyuncs.com/adb-spark-toolkit-submit-0.0.1.tar.gz
  2. 執行以下命令,解壓並安裝Spark-Submit。

    tar zxvf adb-spark-toolkit-submit-0.0.1.tar.gz

Spark應用配置參數

Spark-Submit安裝包解壓完成後,進入adb-spark-toolkit-submit/conf目錄,執行vim spark-defaults.conf命令修改配置項。修改後,Spark-Submit命令列工具的指令碼將自動讀取設定檔中的資訊,配置參數會對所有Spark應用生效。

Spark應用配置參數列表如下:

參數

是否必填

參數說明

樣本值

keyId

阿里雲帳號或具備AnalyticDB for MySQL存取權限的RAM使用者的AccessKey ID。

如何擷取AccessKey ID和AccessKey Secret,請參見帳號與許可權

LTAI5tFosFYFgrt3NzBX****

secretId

阿里雲帳號或具備AnalyticDB for MySQL存取權限的RAM使用者的AccessKey Secret。

如何擷取AccessKey ID和AccessKey Secret,請參見帳號與許可權

1BvoSGRT4FV7GB07VVgrRGUty****

regionId

AnalyticDB for MySQL叢集的地區ID。

cn-hangzhou

clusterId

AnalyticDB for MySQL叢集的叢集ID。

amv-bp1908350u5****

rgName

執行Spark應用的Job型資源群組名稱。

test

ossKeyId

Spark Jar應用需要的JAR包儲存在本地路徑時,需要配置ossKeyId、ossSecretId、ossUploadPath。

  • ossKeyId、ossSecretId為阿里雲帳號或RAM使用者的AccessKey ID和AccessKey Secret。RAM使用者需具備AliyunOSSFullAccess許可權。

  • ossUploadPath為本地JAR包上傳至OSS的路徑。

LTAI5tFosFYFgrt3NzBX****

ossSecretId

1BvoSGRT4FV7GB07VVgrRGUty****

ossUploadPath

oss://testBucketname/jars/test1.jar

conf參數

與開源Spark中的配置項基本一致,參數格式為key:value形式,多個參數之間以英文逗號(,)分隔。更多conf參數,請參見Spark應用配置參數說明

提交Spark應用

  1. 將Spark應用依賴JAR包上傳到OSS中,具體操作,請參見簡單上傳

  2. 執行以下命令,進入Spark-Submit工具的目錄。

    cd adb-spark-toolkit-submit
  3. 按如下格式提交應用。

    ./bin/spark-submit  \
    --class com.aliyun.spark.oss.SparkReadOss \
    --verbose \
    --name Job1 \
    --jars oss://testBucketname/jars/test.jar,oss://testBucketname/jars/search.jar\
    --conf spark.driver.resourceSpec=medium \
    --conf spark.executor.instances=1 \
    --conf spark.executor.resourceSpec=medium \
    oss://testBucketname/jars/test1.jar args0 args1
    說明

    Spark應用提交後,返回碼說明如下:

    • 255:應用執行失敗。

    • 0:應用執行成功。

    • 143:應用被Kill。

    參數說明如下。

    參數名稱

    參數說明

    --class

    Java或者Scala程式入口類名稱。Python不需要指定入口類。

    --verbose

    列印出提交Spark過程中產生的日誌。

    --name

    Spark應用程式名稱。

    --jars

    Spark應用依賴的JAR包所在的路徑,可以是本地路徑或OSS路徑。需為絕對路徑。如果有多個JAR包,路徑之間以英文逗號(,)分隔。

    如果您配置本地路徑,您需注意以下內容:

    • RAM使用者具備OSS的AliyunOSSFullAccess許可權。

    • 需在conf/spark-defaults.conf設定檔中設定ossUploadPath參數,指定本地檔案資源上傳到OSS的路徑。

    • 檔案資源上傳時,會使用md5校正檔案內容,當指定的OSS路徑中有相同檔案名稱且md5相同時,將不再重複上傳。

    • 如果手動更新了OSS路徑中的JAR包,請刪除對應的md5檔案。

    --conf

    Spark應用的配置參數。

    與開源Spark-Submit中的配置基本一致。與開源Spark-Submit用法不一致的配置參數及AnalyticDB for MySQL Spark-Submit特有的配置參數,請參見AnalyticDB for MySQL Spark-Submit與開源Spark-Submit的區別

    說明

    配置多個conf時,格式為:--conf key1=value1 --conf key2=value2。

    oss://testBucketname/jars/test1.jar args0 args1

    Spark應用主檔案的儲存路徑,檔案路徑需為絕對路徑。主檔案是入口類所在的JAR包或者Python的入口執行檔案。

    說明

    Spark應用主檔案目前只支援儲存在OSS中。

    args

    請根據業務需求,填寫使用JAR包時需要使用的參數。多個參數之間以空格分隔。

查看Spark應用列表

./bin/spark-submit --list --clusterId <cluster_Id>  --rgName <ResourceGroup_name> --pagenumber 1 --pagesize 3

參數說明:

  • cluster_Id:AnalyticDB for MySQL叢集的叢集ID。

  • ResourceGroup_name:執行Spark應用使用的Job型資源群組名稱。

查詢Spark應用狀態

./bin/spark-submit --status <appId>

appId可在Spark應用列表中查看,詳情請參見查看Spark應用列表

查詢Spark應用提交參數和SparkUI

./bin/spark-submit --detail <appId>

appId可在Spark應用列表中查看,詳情請參見查看Spark應用列表

返回結果中Spark WEB UI欄位即Spark UI地址。

查詢Spark應用日誌

./bin/spark-submit --get-log <appId>

appId可在Spark應用列表中查看,詳情請參見查看Spark應用列表

結束Spark應用

./bin/spark-submit --kill <appId>

appId可在Spark應用列表中查看,詳情請參見查看Spark應用列表

AnalyticDB for MySQL Spark-Submit與開源Spark-Submit的區別

AnalyticDB for MySQL Spark-Submit特有的參數

參數名稱

參數說明

--api-retry-times

AnalyticDB for MySQL Spark-Submit內部執行命令失敗時的重試次數(除提交命令外),預設值:3。

提交任務不是一個等冪操作,由於網路逾時等原因導致的提交失敗,實際上任務可能在後台執行成功,為防止任務重複提交,提交任務失敗將不會重試。您需要自行擷取已經提交的工作清單(--list),或者在AnalyticDB for MySQL Spark控制台查看工作清單判斷任務是否提交成功。

--time-out-seconds

AnalyticDB for MySQL Spark-Submit內部預設的網路逾時時間,逾時命令將會失敗重試。單位:秒(s),預設值:10。

--enable-inner-endpoint

當您使用阿里雲ECS機器提交Spark時,可以指定此選項,AnalyticDB for MySQL Spark-Submit將使用VPC內網環境來訪問各個服務。

--list

擷取應用列表,常搭配--pagenumber--pagesize使用。

例如,返回第一頁的5個應用,則配置如下:

--list 
--pagenumber 1 
--pagesize 5

--pagenumber

指定應用列表的頁數。預設值為1。

--pagesize

指定應用列表每頁顯示的應用個數。預設值為10。

--kill

終止應用。

--get-log

查詢應用日誌。

--status

查詢應用詳情。

AnalyticDB for MySQL Spark-Submit不支援的開源Spark-Submit參數

AnalyticDB for MySQL Spark-Submit暫不支援開源Spark-Submit的配置參數。詳情請參見AnalyticDB for MySQL不支援的配置參數