開始使用星火運營商 Amazon EMR 上 EKS - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

開始使用星火運營商 Amazon EMR 上 EKS

本主題可協助您EKS透過部署 Spark 應用程式和排程 Spark 應用程式,開始使用 Amazon 上的 Spark 運算子。

安裝 Spark Operator

請使用下列步驟來安裝 Kubernetes Operator for Apache Spark。

  1. 如果您尚未這麼做,請完成 建立 Amazon EMR 的星火運營商 EKS 中的步驟。

  2. 向 Amazon ECR 註冊表驗證您的 Helm 客戶端。在下列命令中,取代 region-id 值與您的首選 AWS 區域,以及相應的 ECR-registry-account 頁面中「區域Amazon ECR 註冊表帳戶按區域」的值。

    aws ecr get-login-password \ --region region-id | helm registry login \ --username AWS \ --password-stdin ECR-registry-account.dkr.ecr.region-id.amazonaws.com
  3. 使用以下命令安裝 Spark Operator。

    對於 Helm 圖表--version參數,請使用您的 Amazon EMR 版本標籤,並刪除emr-前綴和日期後綴。例如,對於 emr-6.12.0-java17-latest 發行版本,請指定 6.12.0-java17。下列命令中的範例使用 emr-7.2.0-latest 版本,因此它會為 Helm Chart --version 指定 7.2.0

    helm install spark-operator-demo \ oci://895885662937.dkr.ecr.region-id.amazonaws.com/spark-operator \ --set emrContainers.awsRegion=region-id \ --version 7.2.0 \ --namespace spark-operator \ --create-namespace

    根據預設,命令會為 Spark Operator 建立服務帳戶 emr-containers-sa-spark-operator。若要使用不同的服務帳戶,請提供引數 serviceAccounts.sparkoperator.name。例如:

    --set serviceAccounts.sparkoperator.name my-service-account-for-spark-operator

    如果想要搭配使用垂直自動擴展與 Spark Operator,請在安裝命令中新增以下命令列,以允許 Operator 使用 Webhook:

    --set webhook.enable=true
  4. 請確認已使用 helm list 命令安裝 Helm Chart:

    helm list --namespace spark-operator -o yaml

    helm list 命令應傳回新部署的 Helm Chart 版本資訊:

    app_version: v1beta2-1.3.8-3.1.1 chart: spark-operator-7.2.0 name: spark-operator-demo namespace: spark-operator revision: "1" status: deployed updated: 2023-03-14 18:20:02.721638196 +0000 UTC
  5. 使用您需要的任何其他選項完成安裝。有關更多信息,請參閱上的spark-on-k8s-operator文檔。 GitHub

執行 Spark 應用程式

星火運營商與 Amazon EMR 6.10.0 或更高版本的支持。當您安裝 Spark Operator 時,它會預設建立服務帳戶 emr-containers-sa-spark 以執行 Spark 應用程式。使用以下步驟與星火運營商在 Amazon EMR EKS 6.10.0 或更高版本上運行 Spark 應用程序。

  1. 在使用 Spark Operator 執行 Spark 應用程式之前,請先完成 建立 Amazon EMR 的星火運營商 EKS安裝 Spark Operator 中的步驟。

  2. 使用以下範例內容,建立 SparkApplication 定義檔案 spark-pi.yaml

    apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: spark-pi namespace: spark-operator spec: type: Scala mode: cluster image: "895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-6.10.0:latest" imagePullPolicy: Always mainClass: org.apache.spark.examples.SparkPi mainApplicationFile: "local:///usr/lib/spark/examples/jars/spark-examples.jar" sparkVersion: "3.3.1" restartPolicy: type: Never volumes: - name: "test-volume" hostPath: path: "/tmp" type: Directory driver: cores: 1 coreLimit: "1200m" memory: "512m" labels: version: 3.3.1 serviceAccount: emr-containers-sa-spark volumeMounts: - name: "test-volume" mountPath: "/tmp" executor: cores: 1 instances: 1 memory: "512m" labels: version: 3.3.1 volumeMounts: - name: "test-volume" mountPath: "/tmp"
  3. 現在,使用下列命令提交 Spark 應用程式。這也將建立名為 spark-piSparkApplication 物件:

    kubectl apply -f spark-pi.yaml
  4. 使用下列命令檢查 SparkApplication 物件的事件:

    kubectl describe sparkapplication spark-pi --namespace spark-operator

如需有關透過 Spark 運算子提交應用程式至 Spark 的詳細資訊,請參閱上的spark-on-k8s-operator文件SparkApplication中的使用 GitHub.

使用 Amazon S3 進行存儲

若要使用 Amazon S3 做為檔案儲存選項,請將下列組態新增至您的YAML檔案。

hadoopConf: # EMRFS filesystem fs.s3.customAWSCredentialsProvider: com.amazonaws.auth.WebIdentityTokenCredentialsProvider fs.s3.impl: com.amazon.ws.emr.hadoop.fs.EmrFileSystem fs.AbstractFileSystem.s3.impl: org.apache.hadoop.fs.s3.EMRFSDelegate fs.s3.buffer.dir: /mnt/s3 fs.s3.getObject.initialSocketTimeoutMilliseconds: "2000" mapreduce.fileoutputcommitter.algorithm.version.emr_internal_use_only.EmrFileSystem: "2" mapreduce.fileoutputcommitter.cleanup-failures.ignored.emr_internal_use_only.EmrFileSystem: "true" sparkConf: # Required for EMR Runtime spark.driver.extraClassPath: /usr/lib/hadoop-lzo/lib/*:/usr/lib/hadoop/hadoop-aws.jar:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf:/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/emrfs/auxlib/*:/usr/share/aws/emr/security/conf:/usr/share/aws/emr/security/lib/*:/usr/share/aws/hmclient/lib/aws-glue-datacatalog-spark-client.jar:/usr/share/java/Hive-JSON-Serde/hive-openx-serde.jar:/usr/share/aws/sagemaker-spark-sdk/lib/sagemaker-spark-sdk.jar:/home/hadoop/extrajars/* spark.driver.extraLibraryPath: /usr/lib/hadoop/lib/native:/usr/lib/hadoop-lzo/lib/native:/docker/usr/lib/hadoop/lib/native:/docker/usr/lib/hadoop-lzo/lib/native spark.executor.extraClassPath: /usr/lib/hadoop-lzo/lib/*:/usr/lib/hadoop/hadoop-aws.jar:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf:/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/emrfs/auxlib/*:/usr/share/aws/emr/security/conf:/usr/share/aws/emr/security/lib/*:/usr/share/aws/hmclient/lib/aws-glue-datacatalog-spark-client.jar:/usr/share/java/Hive-JSON-Serde/hive-openx-serde.jar:/usr/share/aws/sagemaker-spark-sdk/lib/sagemaker-spark-sdk.jar:/home/hadoop/extrajars/* spark.executor.extraLibraryPath: /usr/lib/hadoop/lib/native:/usr/lib/hadoop-lzo/lib/native:/docker/usr/lib/hadoop/lib/native:/docker/usr/lib/hadoop-lzo/lib/native

如果您使用 Amazon 7.2.0 及更高EMR版本,則預設會包含組態。在這種情況下,您可以將文件路徑設置為,s3://<bucket_name>/<file_path>而不是local://<file_path>在 Spark 應用程序YAML文件中。

然後正常提交 Spark 應用程序。