通过boto3启动AWS EMR Notebook无法进入Running状态,如何验证执行结果
EMR Notebook无法进入RUNNING状态的排查与验证方法
代码层面的首要问题
你当前提交的测试代码中,调用start_notebook_execution启动Notebook执行后仅休眠5秒,就主动调用了stop_notebook_execution终止任务。EMR Notebook从启动到进入RUNNING状态通常需要10秒到数分钟不等,提前终止是你看不到RUNNING状态的核心原因。
验证Notebook执行成功的具体方法
- 调整Lambda执行逻辑,获取完整状态流转
先注释代码中主动停止执行的client.stop_notebook_execution相关逻辑,增加轮询查询状态的逻辑,避免提前中断任务,示例参考:# 替换原有sleep 5秒+stop的逻辑 max_wait_time = 600 # 可根据Notebook实际运行时长调整最长等待时间,单位为秒 waited_time = 0 while waited_time < max_wait_time: desc_resp = client.describe_notebook_execution(NotebookExecutionId=execution_id) exec_status = desc_resp['NotebookExecution']['Status'] print(f"当前执行状态:{exec_status}") # 状态进入终态或已进入运行状态就终止轮询 if exec_status in ["RUNNING", "FINISHED", "FAILED", "STOPPED"]: # 若需要查看失败原因,打印desc_resp['NotebookExecution'].get('LastStateChangeReason') break time.sleep(10) waited_time += 10 - 查看S3存储的执行输出
调用start_notebook_execution时你需要配置NotebookS3Location参数指定输出路径,Notebook执行完成后,运行后的带单元格输出的ipynb文件、运行日志都会自动上传到该S3路径,直接下载查看该文件就能确认脚本是否按预期运行。 - 查看EMR集群步骤日志
Notebook执行本质是在绑定的EMR集群上提交了一个专属步骤,你可以打开EMR控制台进入对应集群的「步骤」页签,找到对应ID的Notebook执行任务,直接查看该步骤的stdout、stderr日志定位运行问题。 - 查看状态变更原因字段
当执行状态为FAILED/STOPPED时,调用describe_notebook_execution返回的结果中会包含LastStateChangeReason、FailureReason字段,会明确标注失败的具体原因,比如权限不足、脚本语法错误、集群资源不足、路径不存在等。 - 校验IAM权限配置
确认Lambda执行角色、Notebook指定的ServiceRole都已配置EMR操作、S3读写、集群访问的对应权限,权限缺失会导致Notebook启动后直接停止或失败。
现有CloudWatch日志说明
你日志中出现的STARTING后直接跳转STOPPED/FAILED,一部分是你提前调用stop接口导致,另一部分可能是权限或参数配置错误导致的启动失败,注释stop逻辑重新测试即可看到完整的状态流转。
内容的提问来源于stack exchange,提问作者user22
相关产品推荐
相关产品推荐

