如何使用 AWS Lambda 在 AWS EMR 上运行 PySpark

Posted

技术标签:

【中文标题】如何使用 AWS Lambda 在 AWS EMR 上运行 PySpark【英文标题】:How to run PySpark on AWS EMR with AWS Lambda 【发布时间】:2020-06-02 19:22:27 【问题描述】:

如何使我的 PySpark 代码与来自 AWS Lambda 的 AWS EMR 一起运行?我是否必须使用 AWS Lambda 创建自动终止 EMR 集群才能运行我的 S3 存储代码一次?

【问题讨论】:

要运行 PySpark,您需要使用 EMR。要启动 EMR,您可以使用各种选项,包括 AWS 控制台、awscli 或 Lambda 函数。您不必使用 Lambda,但如果有意义,您可以使用,例如EMR 集群启动由到达 S3 存储桶的数据触发。 你有这方面的资源可以参考吗? 假设您使用 Python,那么您将使用 boto3 库来启动 EMR 集群。 boto3 文档有更详细的解释。 【参考方案1】:

在这种情况下,您需要临时集群,一旦您的作业完成或达到超时(以先发生者为准),它将自动终止。

您可以访问此link,了解如何对其进行初始化。

【讨论】:

我们也可以在 S3 上运行 python 脚本【参考方案2】:

可用于创建 EMR 集群的流程有哪些:

    使用boto3 /AWS CLI /Java SDK 使用cloudformation 使用数据管道

我是否必须使用 AWS Lambda 创建一个自动终止的 EMR 集群才能运行我的 S3 存储代码一次?

。使用 lambda 创建自动终止集群不是强制性的。

您只需要在使用 boto3 / CLi / Java-SDK 创建集群时指定一个标志 --auto-terminate。但是在这种情况下,您需要将作业与集群配置一起提交。 Ref

注意:

无法使用 cloudformation 创建自动终止集群。根据设计,CloudFormation 假定 正在创建的资源在某种程度上将是永久性的。

如果您真的必须这样做,您可以调用 AWS api 到 完成 EMR 任务后删除 CF 堆栈。

如何让我的 PySpark 代码通过 AWS Lambda 与 AWS EMR 一起运行?

您可以将 lambda 设计为 submit spark job。 你可以找到一个例子 here

在我的用例中,我有一个参数化的 lambda,它调用 CF 来创建集群、提交作业和终止集群。

【讨论】:

我们如何在 S3 上运行 .py 脚本,因为上述示例需要 jar(这意味着 scala/java) .jar 的位置放置您的.py 文件。在 python 的情况下不需要输入类名。当然,还需要其他配置,例如将环境变量 PYSPARK_PYTHON 设置为 python 可执行路径。您可以在 spark 文档中找到更多详细信息。 你好,我试过了,但它的失败可能是我缺少一些基本的东西,你有一个可行的例子吗,我的尝试在这里:***.com/questions/62928662/…

以上是关于如何使用 AWS Lambda 在 AWS EMR 上运行 PySpark的主要内容,如果未能解决你的问题,请参考以下文章

AWS EMR实例组竞价实例扩展失败切换按需实例方法

什么是AWS Lambda?

如何在 AWS EMR 上重启纱线

如何在多个子网上运行 AWS EMR 集群?

打开/关闭 AWS EMR 集群

Apache Hudi在AWS Glue和AWS EMR上同步元数据的异同