すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:Spark ジョブの送信

最終更新日:Jan 11, 2025

Alibaba Cloud E-MapReduce(EMR)では、カスタムリソース定義(CRD)を使用するか、spark-submit コマンドを実行するか、EMR コンソールでジョブを送信できます。このトピックでは、これらの方法を使用して Spark ジョブを送信する方法について説明します。

前提条件

EMR on ACK ページで Spark クラスタが作成されます。詳細については、「クラスタの作成」をご参照ください。

注意事項

このトピックでは、必要な JAR ファイルはイメージにパッケージ化されています。独自の JAR ファイルを使用している場合は、Alibaba Cloud Object Storage Service(OSS)に JAR ファイルをアップロードできます。ファイルのアップロード方法の詳細については、「簡単なアップロード」をご参照ください。

この場合、コマンドの local:///opt/spark/examples/spark-examples.jar を、JAR ファイルが OSS に保存されている実際のパスに置き換える必要があります。パスは、oss://<yourBucketName>/<path>.jar 形式で指定します。

Spark ジョブの送信

方法 1:CRD を使用して Spark ジョブを送信する

  1. kubectl を使用して Alibaba Cloud Container Service for Kubernetes(ACK)クラスタに接続します。詳細については、「クラスタの 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 が使用されています。

    • この例では、EMR V5.6.0 用の Spark 3.2.1 が使用されています。別のバージョンの Spark を使用する場合は、ビジネス要件に基づいて sparkVersion パラメータを設定します。

  3. ジョブを送信するには、次のコマンドを実行します。

    kubectl apply -f spark-pi.yaml --namespace <Namespace in which the cluster resides>

    <Namespace in which the cluster resides> は、ビジネス要件に基づいて名前空間に置き換えます。名前空間を表示するには、EMR コンソールにログインし、[クラスタの詳細] タブに移動します。

    次の情報が返されます。

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

    spark-pi-simple は、送信された Spark ジョブの名前です。

  4. オプション。 [ジョブの詳細] タブで、送信された Spark ジョブに関する情報を表示します。

方法 2:spark-submit コマンドを実行して Spark ジョブを送信する

  1. kubectl を使用して Alibaba Cloud ACK クラスタに接続します。詳細については、「クラスタの 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 ツールを使用して Spark ジョブを送信します。

    構文:

     ./emr-spark-ack -n <Namespace in which the cluster resides> <Spark command>
    説明

    <Spark command> は、Spark が必要とするモードに基づいて、spark-submit、spark-sql、spark-shell、または pyspark コマンドに置き換えることができます。

    • クラスタモード:

      spark-submit コマンドを実行して、spark-pi という名前のジョブを送信します。構文:

      ./emr-spark-ack -n <Namespace in which the cluster resides> spark-submit \
          --name spark-pi-submit \
          --deploy-mode cluster \
          --class org.apache.spark.examples.SparkPi \
          local:///opt/spark/examples/spark-examples.jar \
          1000
    • クライアントモード:

      • spark-sql コマンドを実行して Spark ジョブを送信します。構文:

        # Prepare an SQL file on your on-premises machine. // オンプレミス マシンで SQL ファイルを準備します。
        echo "select 1+1">test.sql
        # Submit a Spark job. // Spark ジョブを送信します。
        ./emr-spark-ack -n <Namespace in which the cluster resides> spark-sql -f test.sql

        EMR V5.X 用の Spark 3 以降では、emr-spark-ack ツールはオンプレミス ファイルの依存関係の自動アップロードをサポートしています。--jars--files-f などのフィールドで指定されたオンプレミス ファイルを含む、ジョブ送信コマンドのオンプレミス ファイルの依存関係は、Spark クラスタに自動的にアップロードできます。依存関係は、ACK クラスタで Spark ジョブを送信するために使用されます。

        次の図は、サンプルコードと返された情報を示しています。result-spark

      • spark-shell コマンドを実行して Spark ジョブを送信します。

        ./emr-spark-ack -n <Namespace in which the cluster resides> spark-shell

        次の図は、サンプルコードと返された情報を示しています。result-shell

  4. オプション。 [ジョブの詳細] タブで、送信されたジョブに関する情報を表示します。

  5. オプション。 emr-spark-ack ツールを使用して Spark ジョブを終了します。

    構文:

     ./emr-spark-ack -n <Namespace in which the cluster resides> kill <Spark_app_id>
    説明

    emr-spark-ack ツールは、Spark ジョブを送信するときに、<Spark_app_id> で指定された Spark アプリケーションの ID を生成します。出力ログで ID を表示できます。

方法 3:EMR コンソールで Spark ジョブを送信する

  1. アクセスリンクとポート タブに移動します。

    1. EMR コンソール にログインします。左側のナビゲーションペインで、[EMR on ACK] をクリックします。

    2. EMR on ACK ページで、目的のクラスタを見つけ、[クラスタ ID/名前] 列にあるクラスタの名前をクリックします。

    3. 表示されるページで、[アクセスリンクとポート] タブをクリックします。

  2. [アクセスリンクとポート] タブで、[アクセス URL] 列の [sparksubmitgateway UI] に対応するリンクをクリックします。

    その後、シェル端末に移動できます。

  3. シェル端末で、次のコマンドのいずれかを実行します。

    • spark-sql コマンド:

      spark-sql

      spark-sql コマンドを実行した後、インタラクティブクエリを実行できます。

      spark-sql

    • 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. オプション。 [ジョブの詳細] タブで、送信された Spark ジョブに関する情報を表示します。

関連情報