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

E-MapReduce:Spark ジョブの送信

最終更新日:Jun 22, 2026

EMR on ACK は、カスタムリソース定義 (CRD)、spark-submit コマンド、コンソールターミナルの 3 つのジョブ送信方法をサポートしています。このトピックでは、これらの方法について説明します。

前提条件

EMR on ACK コンソールで Spark クラスターを作成します。詳細については、「クラスターの作成」をご参照ください。

注意事項

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

コマンド内の local:///opt/spark/examples/spark-examples.jar を、ご利用の JAR ファイルの OSS パスに置き換えてください。パスのフォーマットは oss://<yourBucketName>/<path>.jar です。

ジョブの送信

方法1: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 <cluster-namespace>

    <cluster-namespace> をご利用のクラスターの名前空間に置き換えてください。名前空間は、EMR on ACK コンソールの クラスターの詳細 ページで確認できます。

    次の出力が返されます:

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

    spark-pi-simple は、この例のジョブ名です。

  4. 任意: 作成されたジョブを ジョブの詳細 ページで表示します。

方法2:spark-submit コマンド

  1. kubectl を使用して Kubernetes クラスターに接続します。詳細については、「クラスターの KubeConfig ファイルを取得し、kubectl を使用してクラスターに接続する」をご参照ください。

  2. 次のコマンドを実行して、Alibaba Cloud E-MapReduce の 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 <cluster-namespace> <spark-command>
    説明

    <spark-command> プレースホルダーは、spark-submit、spark-sql、spark-shell、および pyspark をサポートしています。構文はネイティブの Spark コマンドと同じです。

    • 例:クラスターモード

      spark-submit を使用して spark-pi ジョブを送信します。

      ./emr-spark-ack -n <cluster-namespace> 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 コマンドの使用

        # ローカル SQL ファイルを準備します。
        echo "select 1+1">test.sql
        # ジョブを送信します。
        ./emr-spark-ack -n <cluster-namespace> spark-sql -f test.sql

        Spark 3 以降 (EMR-5.X) を実行するクラスターの場合、emr-spark-ack ツールはローカル依存関係を自動的にアップロードします。このツールは、--jars--files-f などのパラメーターで指定されたローカルファイルを、Kubernetes 環境でジョブを送信する前に EMR on ACK クラスターにアップロードします。

        次のコードは例とその出力を示しています:

        [user@hostname ~]$ echo "select 1+1">test.sql
        [user@hostname ~]$ ./emr-spark-ack -n <cluster-namespace> spark-sql -f test.sql
        uploading test.sql to c-xxx/spark-submit-gateway-865bbf56f6-sfb95:/opt/spark/work-dir/test.sql
        cmd: kubectl exec spark-submit-gateway-865bbf56f6-sfb95 -i -n <cluster-namespace> -- /bin/bash spark-sql -f test.sql
        Warning: Ignoring non-Spark config property: ack.clusterid.for.rss.linked
        Setting default log level to "WARN".
        To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
        Spark master: k8s://https://kubernetes.default:443, Application Id: spark-application-1653639654376
        Time taken: 4.738 seconds, Fetched 1 row(s)
        2
        22/05/27 16:21:04 WARN [shutdown-hook-0] ExecutorPodsWatchSnapshotSource: Kubernetes client has been closed.
      • spark-shell コマンドの使用

        ./emr-spark-ack -n <cluster-namespace> spark-shell

        次のコードは例とその出力を示しています:

        [user@hostname ~]$ ./emr-spark-ack -n <cluster-namespace> spark-shell
        cmd: kubectl exec spark-submit-gateway-865bbf56f6-sfb95 -it -n <cluster-namespace> -- /bin/bash spark-shell
        Warning: Ignoring non-Spark config property: ack.clusterid.for.rss.linked
        Setting default log level to "WARN".
        To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
        Spark context Web UI available at http://10.210.xxx.xxx:4041
        Spark context available as 'sc' (master = k8s://https://kubernetes.default:443, app id = spark-application-16536387xxx).
        Spark session available as 'spark'.
        Welcome to
              ____              __
             / __/__  ___ _____/ /__
            _\ \/ _ \/ _ `/ __/  '_/
           /___/ .__/\_,_/_/ /_/\_\   version 3.2.1
              /_/
        Using Scala version 2.12.15 (OpenJDK 64-Bit Server VM, Java 1.8.0_332)
        Type in expressions to have them evaluated.
        Type :help for more information.
        scala>
  4. 任意: 作成されたジョブを ジョブの詳細 ページで表示します。

  5. 任意: emr-spark-ack ツールを使用してジョブを終了します。

    次の構文を使用します。

     ./emr-spark-ack -n <cluster-namespace> kill <Spark_app_id>
    説明

    emr-spark-ack ツールは、ジョブを送信するときに <Spark_app_id> を生成します。この ID は出力ログで確認できます。

方法3:コンソールターミナル

  1. [アクセスリンクとポート] ページに移動します。

    1. EMR on ACK コンソールにログインします。

    2. EMR on ACK ページで、対象クラスターの名前をクリックします。

    3. Access Links and Ports タブをクリックします。

  2. Access Links and Ports ページで、[SparkSubmitGateway UI] のリンクをクリックします。

    これにより、シェルターミナルが開きます。

  3. シェルターミナルで、次の 2 つの方法のいずれかで Spark コマンドを実行します。

    • spark-sql コマンドの使用

      spark-sql

      spark-sql シェルに入った後、Spark コマンドを実行してインタラクティブなクエリを実行できます。

      [root@spark-submit-gateway-865bb... work-dir]# spark-sql
      Warning: Ignoring non-Spark config property: ack.clusterid.for.rss.linked
      Setting default log level to "WARN".
      To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
      Spark master: k8s://https://kubernetes.default:443, Application Id: spark-application-1654656192425
      spark-sql> select 1+1;
      2
      Time taken: 5.277 seconds, Fetched 1 row(s)
      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. 任意: 作成されたジョブを ジョブの詳細 ページで表示します。

関連トピック