+++ 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 配置文件:

  1. 从 AWS 控制台选择 Elastic Kubernetes Service。
  2. 选择集群,并选择作为工作坊一部分创建的 CloudFormation 堆栈。
  3. 选择配置
  4. 选择计算

运行以下命令创建一个新的 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 作业。