本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
开始使用适用于 Amaz EMR on 的 Spark 运营商 EKS
本主题EKS通过部署 Spark 应用程序和计划 Spark 应用程序,帮助您开始在亚马逊上使用 Spark 运算符。
安装 Spark Operator
按照以下步骤安装 Apache Spark 版 Kubernetes Operator。
-
如果尚未执行此操作,请完成 在上为亚马逊EMR设置 Spark 运算符 EKS 中的步骤。
-
向 Amazon ECR 注册表验证您的 Helm 客户端。在以下命令中,将这些
region-id
值替换为您的首选ECR-registry-account
值 AWS 区域,以及按地区划分的亚马逊ECR注册账户页面中相应区域的值。aws ecr get-login-password \ --region
region-id
| helm registry login \ --username AWS \ --password-stdinECR-registry-account
.dkr.ecr.region-id
.amazonaws.com -
使用以下命令安装 Spark Operator。
对于 Helm char
--version
t 参数,请使用删除emr-
前缀和日期后缀的 Amazon EMR 版本标签。例如,若为emr-6.12.0-java17-latest
发行版,则指定6.12.0-java17
。以下命令中的示例使用emr-7.3.0-latest
发行版,因此为 Helm 图表--version
指定了7.3.0
。helm install spark-operator-demo \ oci://895885662937.dkr.ecr.
region-id
.amazonaws.com/spark-operator \ --set emrContainers.awsRegion=region-id
\ --version7.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
-
使用
helm list
命令验证是否安装了 Helm 图表:helm list --namespace spark-operator -o yaml
helm list
命令应返回最新部署的 Helm 图表的版本信息: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 -
使用所需的任何其他选项完成安装。有关更多信息,请参阅中的
spark-on-k8s-operator
文档。 GitHub
运行 Spark 应用程序
亚马逊 EMR 6.10.0 或更高版本支持 Spark 运算符。安装 Spark Operator 时,默认会创建服务账户 emr-containers-sa-spark
来运行 Spark 应用程序。使用以下步骤在亚马逊 EMR EKS 6.10.0 或更高版本上使用 Spark 操作员运行 Spark 应用程序。
-
在使用 Spark Operator 运行 Spark 应用程序之前,请先完成 在上为亚马逊EMR设置 Spark 运算符 EKS 和 安装 Spark Operator 中的步骤。
-
使用以下示例内容创建
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"
-
现在,使用以下命令提交 Spark 应用程序。此操作还会创建一个名为
spark-pi
的SparkApplication
对象:kubectl apply -f spark-pi.yaml
-
使用以下命令检查
SparkApplication
对象的事件:kubectl describe sparkapplication spark-pi --namespace spark-operator
有关通过 Spark 运算符向 Spark 提交应用程序的更多信息,请参阅spark-on-k8s-operator
文档SparkApplication
中的使用
使用 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://
在 Spark 应用程序YAML文件中。<file_path>
然后正常提交 Spark 应用程序。