如何使用 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的主要内容,如果未能解决你的问题,请参考以下文章