You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用AWS Lambda执行EMR Studio中读写S3的PySpark笔记本脚本?

如何用Lambda触发EMR Studio笔记本执行并解决S3写入失败问题

存在可触发EMR Studio笔记本执行的Lambda函数,你当前的两种实现方式都存在问题,导致脚本未成功将结果写入S3,以下是具体分析和解决方案:

方法1:start_notebook_execution API调用错误分析

你当前的代码存在参数误用问题:

  • 错误地将笔记本ID传入了EditorId参数,EditorId是EMR Studio的ID,而非具体笔记本的ID,正确参数应为NotebookId。
  • 需确保RelativePath指向的test_pyspark.py确实存在于目标笔记本的文件结构中,路径层级不能出错。
  • 检查EMR_Notebooks_DefaultRole是否具备足够权限:需包含S3读写权限(s3:GetObject、s3:PutObject)、EMR集群访问权限,以及EMR Studio相关的API调用权限。

修正后的Lambda调用代码

import boto3

def lambda_handler(event, context):
    emr_client = boto3.client('emr', region_name='us-east-1')
    response = emr_client.start_notebook_execution(
        NotebookId='你的笔记本ID',
        ExecutionEngine={
            'Id': '你的EMR集群ID',
            'Type': 'EMR'
        },
        ServiceRole='EMR_Notebooks_DefaultRole',
        RelativePath='test_pyspark.py',
        ExecutionName='Lambda触发的笔记本执行'
    )
    return {'执行ID': response['NotebookExecutionId']}

方法2:EMR集群直接提交Spark步骤的问题排查

这种方式并非触发EMR Studio笔记本,而是直接在集群上运行Spark任务,未写入S3的常见原因包括:

  • 权限不足:EMR集群的EC2实例角色(如EMR_EC2_DefaultRole)未配置S3读写权限,需在IAM控制台为该角色添加对应S3资源的权限策略。
  • 脚本路径错误:确认s3://aws-emr-resources-us-east-1/test_pyspark.py路径正确,文件确实存在。
  • Spark任务日志报错:前往EMR控制台的集群步骤页面,查看对应步骤的日志链接(存储在S3的EMR日志目录中),定位具体报错(如脚本语法错误、Spark配置问题)。
  • 脚本逻辑问题:检查PySpark脚本中的写入代码,确保使用正确的路径和写入方式,例如:
    # 示例正确的S3写入代码
    df.write.mode('overwrite').parquet('s3://你的目标存储桶/结果路径/')
    

通用排查步骤

  • 查看执行日志:
    • 方法1:在EMR Studio控制台的「笔记本执行记录」中找到对应任务,查看日志输出,定位权限、路径或脚本错误。
    • 方法2:在EMR集群的「步骤」页面,点击步骤的「日志链接」,查看Spark任务的详细报错信息。
  • 验证IAM权限:
    • 确认Lambda角色具备emr:StartNotebookExecution权限(方法1)或emr:AddJobFlowSteps权限(方法2)。
    • 确认EMR相关角色(笔记本服务角色、集群EC2实例角色)具备S3读写权限。

内容的提问来源于stack exchange,提问作者Supriya R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 12:22:51