如何在AWS EMR中通过spark-submit运行ECR内Docker镜像中的PySpark程序
可行性说明
你的思路完全正确,AWS EMR 5.30及以上版本、6.x全版本均原生支持Docker容器运行时,可直接通过spark-submit调用ECR内的自定义镜像运行PySpark作业。
前置准备
- 确认EMR集群版本符合要求,且集群所在区域与ECR镜像存储区域一致
- 给EMR集群关联的EC2实例角色(默认角色为
EMR_EC2_DefaultRole)添加AmazonEC2ContainerRegistryReadOnly权限策略,保证集群节点有权限拉取ECR私有镜像
完整spark-submit执行命令
spark-submit \ --master yarn \ --deploy-mode cluster \ --conf spark.executorEnv.YARN_CONTAINER_RUNTIME_TYPE=docker \ --conf spark.executorEnv.YARN_CONTAINER_RUNTIME_DOCKER_IMAGE=123456789123.dkr.ecr.us-east-1.amazonaws.com/你的镜像名:latest \ --conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_TYPE=docker \ --conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_DOCKER_IMAGE=123456789123.dkr.ecr.us-east-1.amazonaws.com/你的镜像名:latest \ --conf spark.executorEnv.PYSPARK_PYTHON=python3 \ --conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=python3 \ local:///app/app.py
关键参数说明:
- 镜像地址需替换为你实际的ECR镜像地址+版本标签
- 末尾的
local:///app/app.py前缀local://表示读取Docker容器内部的文件路径,对应你Dockerfile中WORKDIR下的app.py
注意事项
- 优先使用
--deploy-mode cluster提交作业,该模式下Driver和Executor都会加载你定义的ECR镜像,依赖环境完全一致;如果用client模式,Driver会运行在作业提交节点本地,不会使用容器镜像 - 若镜像内有自定义的Python路径或者依赖配置,可通过
spark.executorEnv和spark.yarn.appMasterEnv前缀添加对应的环境变量
内容的提问来源于stack exchange,提问作者tomiyos654
相关产品推荐
相关产品推荐

