Amazon EMR on 的 Spark 運算子入門 EKS - Amazon EMR

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

Amazon EMR on 的 Spark 運算子入門 EKS

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

安裝 Spark Operator

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

  1. 如果您尚未這麼做,請完成 在 上設定 Amazon 的 Spark 運算子 EMR EKS 中的步驟。

  2. 將 Helm 用戶端驗證為 Amazon ECR登錄檔。在下列命令中,將region-id值取代為您偏好的 AWS 區域,以及 依區域的 Amazon ECR登錄帳戶頁面中 區域的對應ECR-registry-account值。

    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 Chart --version 參數,請使用您的 Amazon EMR發行標籤,並移除emr-字首和日期尾。例如,對於 emr-6.12.0-java17-latest 發行版本,請指定 6.12.0-java17。下列命令中的範例使用 emr-7.3.0-latest 版本,因此它會為 Helm Chart --version 指定 7.3.0

    helm install spark-operator-demo \ oci://895885662937.dkr.ecr.region-id.amazonaws.com/spark-operator \ --set emrContainers.awsRegion=region-id \ --version 7.3.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.3.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 6.10.0 EMR 或更新版本支援 Spark 運算子。當您安裝 Spark Operator 時,它會預設建立服務帳戶 emr-containers-sa-spark 以執行 Spark 應用程式。使用下列步驟,在 Amazon 6.10EMR.0 EKS 或更新版本上使用 Spark 運算子執行 Spark 應用程式。

  1. 在使用 Spark Operator 執行 Spark 應用程式之前,請先完成 在 上設定 Amazon 的 Spark 運算子 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 的詳細資訊,請參閱 文件中的使用 SparkApplicationspark-on-k8s-operator 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版本,預設會包含組態。在這種情況下,您可以在 Spark 應用程式local://<file_path>檔案中將檔案路徑設定為 s3://<bucket_name>/<file_path>,而不是 YAML。

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