+++
title = " Serverless Spark with AWS Fargate”
weight = 54
hidden=true
pre = “54. ”
+++
在本节中,我们将学习如何使用 AWS Fargate 提交 Spark 作业。
AWS Fargate 是一项技术,它提供按需、大小合适的容器计算能力。使用 AWS Fargate,您不再需要配置、配置或扩展虚拟机组来运行容器。这消除了选择服务器类型、决定何时扩展节点组或优化集群打包的需求。您可以使用 Fargate 配置文件控制在 Fargate 上启动哪些 pod 以及它们的运行方式,这些配置文件是作为您的 Amazon EKS 集群的一部分定义的。
Fargate 配置文件已作为您的 EKS 集群的一部分创建。您可以如下所示检查 Fargate 配置文件:
运行以下命令创建一个新的 EMR 虚拟集群以与 Fargate 配置文件一起使用。将 EKSCluster 的值替换为 CloudFormation 输出。
aws emr-containers create-virtual-cluster \
--name emr_eks_fargate_cluster \
--container-provider '{
"id": "<<EKSCluster>>",
"type": "EKS",
"info": {
"eksInfo": {
"namespace": "eks-fargate"
}
}
}'
记下虚拟集群 ID。我们将使用它来提交作业到 Fargate。
运行以下命令来运行一个计算 Pi 值的 Spark 作业。将 EMR_FARGATE_VIRTUAL_CLUSTER_ID 的值替换为上一步中的虚拟集群 ID。
aws emr-containers start-job-run \
--virtual-cluster-id <<EMR_FARGATE_VIRTUAL_CLUSTER_ID>> \
--name spark-pi-logging \
--execution-role-arn ${EMR_EKS_EXECUTION_ARN} \
--release-label emr-6.2.0-latest \
--job-driver '{
"sparkSubmitJobDriver": {
"entryPoint": "s3://aws-data-analytics-workshops/emr-eks-workshop/scripts/pi.py",
"sparkSubmitParameters": "--conf spark.executor.instances=2 --conf spark.executor.memory=2G --conf spark.executor.cores=2 --conf spark.driver.cores=1"
}
}' \
--configuration-overrides '{
"applicationConfiguration": [
{
"classification": "spark-defaults",
"properties": {
"spark.driver.memory":"2G"
}
}
],
"monitoringConfiguration": {
"cloudWatchMonitoringConfiguration": {
"logGroupName": "/emr-containers/jobs",
"logStreamNamePrefix": "emr-eks-workshop"
},
"s3MonitoringConfiguration": {
"logUri": "'"$S3_BUCKET"'/logs/"
}
}
}'
在 Kubernetes 仪表板上检查作业状态
您还可以运行以下命令来检查作业和 pod 状态:
kubectl get all -n eks-fargate
一旦作业开始运行,您应该会看到类似于此的输出:
转到 EMR 控制台。您将注意到一个新的虚拟集群,名为 emr_eks_fargate_cluster,命名空间为 eks-fargate
选择 emr_eks_fargate_cluster,并检查作业的状态。
作业可能需要几分钟才能运行完成。一旦作业完成,您应该会在 EMR 控制台上看到更新的状态,如下所示:
您可以转到指定的 S3 存储桶检查日志。您的日志数据被发送到以下 Amazon S3 位置。
控制器日志 - /logUri/virtual-cluster-id/jobs/job-id/containers/pod-name/(stderr.gz/stdout.gz)
驱动程序日志 - /logUri/virtual-cluster-id/jobs/job-id/containers/spark-application-id/spark-job-id-driver/(stderr.gz/stdout.gz)
执行器日志 - /logUri/virtual-cluster-id/jobs/job-id/containers/spark-application-id/executor-pod-name/(stderr.gz/stdout.gz)
探索驱动程序日志的内容,并在 stdout.gz 上运行 S3 Select 查询。下面的屏幕截图显示了 PySpark Pi 作业的输出和 Pi 的值。路径应该采用以下格式: s3://xxxx/yyyy/containers/spark-xxxx/spark-xxx-driver/stdout.gz
尝试通过更改虚拟集群 ID 来运行中间部分的 Spark ETL 作业。