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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:36:17