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

Container Service for Kubernetes:ARMベースの仮想ノードでSparkジョブを実行する

最終更新日:Oct 29, 2024

デフォルトでは、Container Service for Kubernetes (ACK) のE-MapReduce (EMR) は、x86アーキテクチャを使用するノードでSparkジョブを実行します。 ARMベースの仮想ノード (弾性コンテナインスタンス) でSparkジョブを実行することもできます。 このトピックでは、ARMベースの仮想ノードでSparkジョブを実行する方法について説明します。

目次

前提条件

EMRおよびEMR on ACKの概要

  • EMRは、Alibaba Cloudが提供するオープンソースのビッグデータ処理ソリューションです。 詳細については、「」をご参照ください。E-MapReduceとは何ですか?

  • EMR on ACKは、ビッグデータジョブの開発と実行に使用できる新しいプラットフォームを提供します。 オープンソースのビッグデータサービスをACKクラスターにデプロイできます。 ACKを使用してサービスをデプロイし、コンテナ化アプリケーションを管理できます。 これにより、基盤となるクラスターリソースのO&Mコストが削減され、ビッグデータジョブに集中できるようになります。 詳細については、「EMR on ACKの概要」をご参照ください。

手順

  1. ACKクラスターに仮想ノードを追加します。 詳細については、「方法2: ARMベースの仮想ノードの追加」をご参照ください。

  2. EMR on ACKクラスターでSparkジョブを送信します。 詳細については、「Sparkジョブの送信」をご参照ください。

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

    カスタムリソース定義 (CRD) を使用してジョブを送信する場合は、次のパラメーターを設定します。

    • image: この例では、registry-vpc.cn-hangzhou.aliyuncs.com/emr/spark-py:emr-3.3.1-1.1.7-armが使用されます。 cn-hangzhouを使用するリージョンのIDに置き換えます。

    • annotations: t o alibabacloud.com/burst-resource値を設定します: "eci_only" 。

    • nodeSelector: 値をkubernetes.io/arch: arm64に設定します。

    サンプルコード:

    クリックして詳細を表示

    apiVersion: "sparkoperator.k8s.io/v1beta2"
    kind: SparkApplication
    metadata:
      name: spark-pi-eci
    spec:
      type: Scala
      sparkVersion: 3.3.1
      mainClass: org.apache.spark.examples.SparkPi
      # The specific image that is used by ARM-based nodes. 
      image: registry-vpc.cn-hangzhou.aliyuncs.com/emr/spark-py:emr-3.3.1-1.1.7-arm
      mainApplicationFile: "local:///opt/spark/examples/spark-examples.jar"
      arguments:
        - "100000"
      driver:
        cores: 2
        coreLimit: 2000m
        memory: 4g
        # Configure the annotations parameter to allow all executors to run Spark jobs by using Elastic Container Instance. 
        annotations:
          alibabacloud.com/burst-resource: "eci_only"
    		# Configure the nodeSelector parameter to specify ARM-based nodes. 
        nodeSelector:
          kubernetes.io/arch: arm64
      executor:
        cores: 4
        coreLimit: 4000m
        memory: 8g
        instances: 10
        # Configure the annotations parameter to allow all executors to run Spark jobs by using Elastic Container Instance. 
        annotations:
          alibabacloud.com/burst-resource: "eci_only"
    		# Configure the nodeSelector parameter to specify ARM-based nodes. 
        nodeSelector:
          kubernetes.io/arch: arm64

    方法2: Spark構成ファイルに基づいてSparkジョブを実行する

    ARMベースのノードでSparkジョブを実行するには、Spark構成ファイルでイメージ、アノテーション、およびノードセレクタを構成します。

    1. [spark-defaults.conf] タブに移動します。

      1. [EMR on ACKコンソール] にログインし、管理するクラスターを見つけて、[操作] 列の [設定] をクリックします。

      2. [設定] タブで、[spark-defaults.conf] タブをクリックします。

    2. SparkクラスターのElastic Container Instanceを有効にします。

      1. [spark-defaults.conf] タブで、[構成項目の追加] をクリックします。

      2. [構成項目の追加] ダイアログボックスで、次の表に示す構成項目を追加します。

        キー

        説明

        spark.kubernetes.container.image

        Sparkイメージ。

        registry-vpc.cn-hangzhou.aliyuncs.com/emr/spark-py:emr-3.3.1-1.1.7-arm

        説明

        cn-hangzhouを使用するリージョンのIDに置き換えます。

        spark.kubernetes.driver.annotation.alibabacloud.com/burst-resource

        SparkドライバーがElastic Container Instanceを使用してSparkジョブを実行するかどうかを指定します。

        eci_only

        spark.kubernetes.driver.node.selector.kubernetes.io/arch

        Sparkドライバのノードセレクタ。

        arm64

        spark.kubernetes.executor.annotation.alibabacloud.com/burst-resource

        SparkエグゼキュータがElastic Container Instanceを使用してSparkジョブを実行するかどうかを指定します。

        eci_only

        spark.kubernetes.exe cutor.node.selector.kubernetes.io/arch

        Sparkエグゼキュータのノードセレクタ。

        arm64

      3. [OK] をクリックします。

      4. 表示されるダイアログボックスで、[実行理由] パラメーターを設定し、[保存] をクリックします。

    3. 設定をデプロイします。

      1. [設定] タブの下部で、[クライアント設定のデプロイ] をクリックします。

      2. 表示されるダイアログボックスで、[実行理由] パラメーターを設定し、[OK] をクリックします。

      3. [確認] メッセージの [OK] をクリックします。