全部產品
Search
文件中心

E-MapReduce:使用ECI彈性調度Spark作業

更新時間:Jul 07, 2024

使用阿里雲Elastic Container Instance(Elastic Container Instance)調度Spark作業,可以不受限於ACK叢集的節點計算容量,靈活動態地按需建立Pod(容器組),有效地降低計算成本。本文為您介紹如何使用ECI彈性調度Spark作業。

背景資訊

如果您需要使用更多ECI的進階功能,可以通過設定更多的Annotation(註解)對ECI按需進行參數配置,詳情請參見ECI Pod Annotation

前提條件

操作步驟

  1. 在ACK叢集中安裝ECI所需的虛擬節點,詳情請參見步驟一:在ACK叢集中部署ack-virtual-node組件

  2. 在EMR on ACK上提交Spark作業時,可以通過設定Label(標籤)、Annotation或者Spark Conf來實現ECI調度Spark作業。

    提交Spark作業詳情,請參見提交Spark作業

    說明

    本文樣本中版本以Spark 3.1.1(EMR-5.2.1-ack)為例,其他版本時請修改sparkVersion和mainApplicationFile的配置。樣本中的參數描述,請參見spark-on-k8s-operator

    • 方式一:配置Pod Label。

      設定參數alibabacloud.com/eci為true,將指定Pod調度到ECI上運行,參考樣本如下。

      apiVersion: "sparkoperator.k8s.io/v1beta2"
      kind: SparkApplication
      metadata:
        name: spark-pi-eci
      spec:
        type: Scala
        sparkVersion: 3.1.1
        mainClass: org.apache.spark.examples.SparkPi
        mainApplicationFile: "local:////opt/spark/examples/jars/spark-examples_2.12-3.1.1.jar"
        arguments:
          - "1000000"
        driver:
          cores: 2
          coreLimit: 2000m
          memory: 4g
        executor:
          cores: 4
          coreLimit: 4000m
          memory: 8g
          instances: 10
          # 通過配置Label,所有Executor使用ECI。
          labels:
            alibabacloud.com/eci: "true"
          #(可選)配置ECI鏡像緩衝,提升效能
          annotations:
            k8s.aliyun.com/eci-image-cache: "true" 
    • 方式二:配置Pod Annotation。

      設定參數alibabacloud.com/burst-resource為eci,將指定Pod調度到ECI上運行,Annotation取值包含兩種類型:

      • eci:當叢集普通節點的資源不足時,使用ECI。

      • eci_only:只使用ECI。

      參考樣本如下。

      apiVersion: "sparkoperator.k8s.io/v1beta2"
      kind: SparkApplication
      metadata:
        name: spark-pi-eci
      spec:
        type: Scala
        sparkVersion: 3.1.1
        mainClass: org.apache.spark.examples.SparkPi
        mainApplicationFile: "local:////opt/spark/examples/jars/spark-examples_2.12-3.1.1.jar"
        arguments:
          - "1000000"
        driver:
          cores: 2
          coreLimit: 2000m
          memory: 4g
        executor:
          cores: 4
          coreLimit: 4000m
          memory: 8g
          instances: 10
          # 通過配置Annotation,當Executor節點資源不足時使用ECI。
          annotations:
            alibabacloud.com/burst-resource: "eci"
            #(可選)配置ECI鏡像緩衝,提升效能
            k8s.aliyun.com/eci-image-cache: "true" 
    • 方式三:配置Spark Conf。

      您也可以通過增加Spark Conf來配置Pod Annotation,從而實現ECI調度。Annotation取值與方式二:配置Pod Annotation相同。

      1. 進入spark-defaults.conf頁簽。

        1. 登入EMR on ACK

        2. 在EMR on ACK頁面,單擊目的地組群操作列的配置

        3. 配置頁簽,單擊spark-defaults.conf

      2. 配置Spark叢集以啟用ECI。

        1. 單擊上方的新增配置項

        2. 新增配置項對話方塊中,添加以下配置。

          參數

          描述

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

          Spark Driver是否使用ECI,取值為eci或eci_only。

          spark.kubernetes.driver.annotation.k8s.aliyun.com/eci-image-cache

          Spark Driver是否使用ECI鏡像緩衝,建議填寫為true。

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

          Spark Executor是否使用ECI,取值為eci或eci_only

          spark.kubernetes.executor.annotation.k8s.aliyun.com/eci-image-cache

          Spark Executor是否使用ECI鏡像緩衝,建議填寫為true。

          spark.kubernetes.driver.annotation.k8s.aliyun.com/eci-ram-role-name

          用於指定建立Spark Driver Pod時應綁定的RAM角色名稱。填寫為AliyunECSInstanceForEMRRole

        3. 單擊確定

        4. 在彈出的對話方塊中,輸入執行原因,單擊儲存

      3. 生效配置。

        1. 單擊部署用戶端配置

        2. 在彈出的對話方塊中,輸入執行原因,單擊確定

        3. 確認對話方塊中,單擊確定

  3. 可選:如果您的作業需要讀寫OSS資料,或者使用了DLF中繼資料,訪問雲端服務時還需要額外授予ECI許可權。授權方式如下:

    • 方式一:通過角色授權ECI以實現免密訪問。

      1. RAM控制台,建立可信實體為阿里雲服務的RAM角色,詳情請參見建立普通服務角色

        說明

        受信服務選擇為雲端服務器。

      2. 為建立的RAM角色授權,權限原則為AliyunOSSFullAccess和AliyunDLFFullAccess。

        為RAM角色授權詳情,請參見為RAM角色授權

      3. 在Spark作業中,按照如下方式添加Annotations,指定建立好的RAM角色即可。

        annotations:
          k8s.aliyun.com/eci-ram-role-name: <建立的角色名稱>
    • 方式二:配置OSS AccessKey或DLF AccessKey。

      • 如果您的作業需要讀寫OSS資料,則需要在hadoopConf中額外增加AccessKey的配置。配置資訊如下。

        hadoopConf:
          fs.jfs.cache.oss.accessKeyId: <yourAccessKeyId>
          fs.jfs.cache.oss.accessKeySecret: <yourAccessKeySecret>
      • 如果您的作業開啟了DLF,則需要在hadoopConf中額外增加AccessKey的配置。配置資訊如下。

        hadoopConf:
          dlf.catalog.accessKeyId: <yourAccessKeyId>
          dlf.catalog.accessKeySecret: <yourAccessKeySecret>
          dlf.catalog.akMode: "MANUAL"