SageMaker Notebook如何通过yarn-client模式连接EMR集群运行PySpark
无Livy依赖:SageMaker Notebook 以yarn-client模式直连EMR集群实现方案
前置校验要求
- 网络连通:SageMaker Notebook实例与EMR集群必须部署在同一VPC内,两端关联的安全组需放通访问:SageMaker侧可主动访问EMR主节点的YARN(8030/8032/8088)、HDFS(9000/9870)、Hive Metastore(9083)默认端口,EMR集群节点安全组需放通SageMaker网段的回流流量
- 权限配置:SageMaker实例绑定的IAM角色需附加EMR集群访问权限、对应S3存储桶读写权限,同时需在EMR集群的EC2实例配置文件的信任策略中加入该SageMaker角色,允许其提交YARN作业
- 版本对齐:SageMaker实例中安装的PySpark、Scala、Hadoop版本必须与目标EMR集群的预装版本完全一致,否则会出现RPC协议不兼容、类找不到等提交报错
具体操作步骤
- 安装匹配版本的PySpark并拉取集群配置
在SageMaker Notebook的系统终端执行以下命令:
# 替换为你EMR集群对应的Spark版本,例如EMR 6.15.0对应Spark 3.4.1、Hadoop 3.3.3 pip install pyspark==3.4.1 # 创建配置文件存储目录 mkdir -p /home/ec2-user/emr_hadoop_conf # 从EMR主节点拉取核心配置文件,替换为你自己的EMR密钥路径、主节点内网IP scp -i /path/to/your/emr-login-key.pem hadoop@<EMR_MASTER_NODE_PRIVATE_IP>:/etc/hadoop/conf/{core-site.xml,yarn-site.xml,hdfs-site.xml,hive-site.xml} /home/ec2-user/emr_hadoop_conf/
如果无法直接scp,也可以登录EMR主节点把上述配置文件下载到本地后,通过SageMaker的文件上传功能传到对应目录。
- Notebook初始化环境变量
在Notebook代码块最开头执行以下配置,确保Spark能找到集群配置:
import os # 指向刚才存放EMR配置文件的目录 os.environ["HADOOP_CONF_DIR"] = "/home/ec2-user/emr_hadoop_conf" os.environ["YARN_CONF_DIR"] = "/home/ec2-user/emr_hadoop_conf" # 根据SageMaker实例规格、EMR队列资源调整作业资源参数 os.environ["PYSPARK_SUBMIT_ARGS"] = ( "--deploy-mode client " "--driver-memory 16g " "--executor-memory 32g " "--executor-cores 8 " "pyspark-shell" )
- 初始化Spark会话
和本地部署逻辑一致,直接构建SparkSession即可,注意修正本地示例代码里getorCreate的拼写错误(正确驼峰写法为getOrCreate),yarn-client模式下master参数填写yarn即可,部署模式通过参数指定:
from pyspark.sql import SparkSession spark = SparkSession.builder \ .master("yarn") \ .appName("sagemaker-yarn-client-job") \ .config("spark.submit.deployMode", "client") \ # 仅当Executor端需要依赖自定义Python库时开启,将依赖打包为zip后传入路径 # .config("spark.submit.pyFiles", "/home/ec2-user/custom_internal_lib.zip") \ .getOrCreate()
验证与注意事项
- 初始化完成后可执行
spark.range(100).count()验证YARN作业是否能正常调度,执行spark.sql("show databases").show()验证是否能正常访问EMR关联的Hive元数据 - 该模式下Spark Driver进程直接运行在SageMaker实例环境中,SageMaker上预装的所有Python第三方库、内部自定义工具都可以直接在Driver端调用,无需额外打包上传,完全满足“先在集群做大规模数据汇总、再在Notebook侧用本地库做后续分析”的需求
- 作业运行过程中需保持Notebook内核活跃,内核中断会直接终止Driver进程,导致整个Spark作业失败
- 如果提交时报YARN权限错误,优先检查SageMaker角色是否被加入EMR YARN队列的允许提交列表,以及EMR节点的IAM角色信任策略是否配置正确
内容的提问来源于stack exchange,提问作者Luis Leal
相关产品推荐
相关产品推荐

