全部產品
Search
文件中心

E-MapReduce:提交Spark作業

更新時間:Jul 07, 2024

EMR支援CRD、spark-submit和控制台終端三種方式提交作業。本文為您介紹如何通過這三種方式提交Spark作業。

前提條件

已在EMR on ACK控制台建立Spark叢集,詳情請參見建立叢集

注意事項

在本文的樣本中,JAR包已經直接打包在了鏡像中。如果您使用的是自己的JAR包,您可以將其上傳到阿里雲OSS。上傳操作請參見簡單上傳

此時,需要您修改命令中的local:///opt/spark/examples/spark-examples.jar為您OSS上存放JAR包的真實路徑,路徑格式為oss://<yourBucketName>/<path>.jar

提交作業

方式一:使用CRD方式提交作業

  1. 通過kubectl串連Kubernetes叢集,詳情請參見擷取叢集KubeConfig並通過kubectl工具串連叢集

  2. 建立spark-pi.yaml檔案,檔案內容如下。

    apiVersion: "sparkoperator.k8s.io/v1beta2"
    kind: SparkApplication
    metadata:
      name: spark-pi-simple
    spec:
      type: Scala
      sparkVersion: 3.2.1
      mainClass: org.apache.spark.examples.SparkPi
      mainApplicationFile: "local:///opt/spark/examples/spark-examples.jar"
      arguments:
        - "1000"
      driver:
        cores: 1
        coreLimit: 1000m
        memory: 4g
      executor:
        cores: 1
        coreLimit: 1000m
        memory: 8g
        memoryOverhead: 1g
        instances: 1

    本文樣本中的參數描述,請參見spark-on-k8s-operator

    說明
    • 檔案名稱您可以自訂,本文以spark-pi.yaml為例介紹。

    • 本文以Spark 3.2.1(EMR-5.6.0)版本為例,其他版本時請修改sparkVersion的配置。

  3. 執行如下命令,提交作業。

    kubectl apply -f spark-pi.yaml --namespace <叢集對應的namespace>

    本文範例程式碼中的<叢集對應的namespace>,需要替換為叢集的命名空間,您可以登入E-MapReduce on ACK控制台,在叢集詳情頁面查看。

    返回如下資訊。

    sparkapplication.sparkoperator.k8s.io/spark-pi-simple created
    說明

    spark-pi-simple為本樣本提交任務後的作業名。

  4. 可選:您可以在作業詳情頁面查看已建立的作業資訊。

方式二:使用spark-submit方式提交作業

  1. 通過kubectl串連Kubernetes叢集,詳情請參見擷取叢集KubeConfig並通過kubectl工具串連叢集

  2. 執行以下命令,安裝阿里雲EMR提供的emr-spark-ack工具並授權。

    wget https://ecm-repo-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/emr-on-ack/util/emr-spark-ack
    chmod 755 emr-spark-ack
  3. 使用emr-spark-ack工具提交作業。

    提交作業的文法如下。

     ./emr-spark-ack -n <叢集對應的namespace> <spark命令>
    說明

    文法中的<spark命令> 支援spark-submit、spark-sql、spark-shell和pyspark四種,文法和Spark本身完全一致。

    • Cluster模式樣本

      通過spark-submit提交spark-pi作業。

      ./emr-spark-ack -n <叢集對應的namespace> spark-submit \
          --name spark-pi-submit \
          --deploy-mode cluster \
          --class org.apache.spark.examples.SparkPi \
          local:///opt/spark/examples/spark-examples.jar \
          1000
    • Client模式樣本

      • spark-sql命令方式

        # 本地準備sql檔案
        echo "select 1+1">test.sql
        # 提交作業
        ./emr-spark-ack -n <叢集對應的namespace> spark-sql -f test.sql

        在Spark 3及以上叢集版本(EMR-5.X版本)中,emr-spark-ack工具支援本地依賴自動上傳,提交命令裡面的本地檔案依賴,包括--jars--files-f等參數中傳入的本地檔案,會自動上傳到EMR on ACK叢集內,用於K8s環境的作業提交。

      • spark-shell命令方式

        ./emr-spark-ack -n <叢集對應的namespace> spark-shell

  4. 可選:您可以在作業詳情頁面,查看已建立的作業資訊。

  5. 可選:使用emr-spark-ack工具終止作業。

    終止作業的文法如下。

     ./emr-spark-ack -n <叢集對應的namespace> kill <Spark_app_id>
    說明

    文法中的<Spark_app_id>是emr-spark-ack工具在提交作業時產生的,您可以在輸出日誌中查看。

方式三:使用控制台終端方式提交作業

  1. 進入訪問連結與連接埠頁面。

    1. 登入EMR on ACK

    2. 在EMR on ACK頁面,單擊目的地組群的叢集名。

    3. 單擊上方的訪問連結與連接埠頁簽。

  2. 訪問連結與連接埠頁面,單擊SparkSubmitGateway UI對應的連結。

    即可進入Shell終端。

  3. 在Shell終端中,可以通過以下兩種方式運行Spark命令。

    • spark-sql命令方式

      spark-sql

      進入spark-sql後,您可以直接運行Spark命令進行互動式查詢。

    • spark-submit命令方式

      spark-submit \
          --name spark-pi-submit \
          --deploy-mode cluster \
          --class org.apache.spark.examples.SparkPi \
          local:///opt/spark/examples/spark-examples.jar \
          1000
  4. 可選:您可以在作業詳情頁面查看已建立的作業資訊。

相關文檔