使用阿里雲Elastic Container Instance(Elastic Container Instance)調度Spark作業,可以不受限於ACK叢集的節點計算容量,靈活動態地按需建立Pod(容器組),有效地降低計算成本。本文為您介紹如何使用ECI彈性調度Spark作業。
背景資訊
如果您需要使用更多ECI的進階功能,可以通過設定更多的Annotation(註解)對ECI按需進行參數配置,詳情請參見ECI Pod Annotation。
前提條件
- 已在E-MapReduce on ACK控制台建立Spark叢集,詳情請參見快速使用EMR on ACK。
已開通Elastic Container Instance服務,詳情請參見使用流程。
操作步驟
在ACK叢集中安裝ECI所需的虛擬節點,詳情請參見步驟一:在ACK叢集中部署ack-virtual-node組件。
在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相同。
進入spark-defaults.conf頁簽。
登入EMR on ACK。
在EMR on ACK頁面,單擊目的地組群操作列的配置。
在配置頁簽,單擊spark-defaults.conf。
配置Spark叢集以啟用ECI。
單擊上方的新增配置項。
在新增配置項對話方塊中,添加以下配置。
參數
描述
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。
單擊確定。
在彈出的對話方塊中,輸入執行原因,單擊儲存。
生效配置。
單擊部署用戶端配置。
在彈出的對話方塊中,輸入執行原因,單擊確定。
在確認對話方塊中,單擊確定。
可選:如果您的作業需要讀寫OSS資料,或者使用了DLF中繼資料,訪問雲端服務時還需要額外授予ECI許可權。授權方式如下:
方式一:通過角色授權ECI以實現免密訪問。
方式二:配置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"