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

EMR中以Docker为YARN容器运行时,如何使用PySpark Shell与Zeppelin?

问题场景

在EMR环境中,使用Docker作为YARN容器运行Spark集群任务时,提交任务的spark-submit命令可正常调用指定Docker镜像:

spark-submit
--deploy-mode cluster \
--conf spark.executorEnv.YARN_CONTAINER_RUNTIME_TYPE=docker \
--conf spark.executorEnv.YARN_CONTAINER_RUNTIME_DOCKER_IMAGE=$DOCKER_IMAGE_NAME \
--conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_TYPE=docker \
--conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_DOCKER_IMAGE=$DOCKER_IMAGE_NAME \
recipe.py

但使用以下命令启动PySpark Shell时,无法找到Docker镜像中安装的Python库:

PYSPARK_PYTHON=ipython \
PYSPARK_DRIVER_PYTHON=ipython \
pyspark \
--conf spark.executorEnv.YARN_CONTAINER_RUNTIME_TYPE=docker \
--conf spark.executorEnv.YARN_CONTAINER_RUNTIME_DOCKER_IMAGE=$DOCKER_IMAGE_NAME \
--conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_TYPE=docker \
--conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_DOCKER_IMAGE=$DOCKER_IMAGE_NAME
问题原因

PySpark Shell默认以client模式启动,Driver进程运行在执行pyspark命令的本地节点,而非YARN调度的Docker容器内。此时Driver使用的是本地节点的Python环境,而非指定的Docker镜像环境,因此无法读取镜像中安装的库。

解决方法

方法1:让Driver也运行在Docker容器中(推荐)

启动PySpark Shell时,添加Driver相关的Docker环境配置,并指定--deploy-mode cluster让Driver由YARN调度到Docker容器中:

PYSPARK_PYTHON=ipython \
PYSPARK_DRIVER_PYTHON=ipython \
pyspark \
--deploy-mode cluster \
--conf spark.executorEnv.YARN_CONTAINER_RUNTIME_TYPE=docker \
--conf spark.executorEnv.YARN_CONTAINER_RUNTIME_DOCKER_IMAGE=$DOCKER_IMAGE_NAME \
--conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_TYPE=docker \
--conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_DOCKER_IMAGE=$DOCKER_IMAGE_NAME \
--conf spark.driverEnv.YARN_CONTAINER_RUNTIME_TYPE=docker \
--conf spark.driverEnv.YARN_CONTAINER_RUNTIME_DOCKER_IMAGE=$DOCKER_IMAGE_NAME

注意:cluster模式下Driver运行在集群节点的Docker容器中,需通过YARN Web UI查看Driver的地址和端口,再通过端口转发等方式连接到交互式Shell。

方法2:在本地节点同步镜像内的Python库

如果不需要Driver运行在Docker中,可直接在执行pyspark命令的本地节点,安装与Docker镜像内完全相同版本的Python库,确保Driver和Executor的环境一致。

方法3:配置Zeppelin使用Docker容器运行Interpreter

若使用Zeppelin,需在Spark Interpreter配置中添加以下参数:

  • spark.executorEnv.YARN_CONTAINER_RUNTIME_TYPE=docker
  • spark.executorEnv.YARN_CONTAINER_RUNTIME_DOCKER_IMAGE=$DOCKER_IMAGE_NAME
  • spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_TYPE=docker
  • spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_DOCKER_IMAGE=$DOCKER_IMAGE_NAME
  • spark.driverEnv.YARN_CONTAINER_RUNTIME_TYPE=docker
  • spark.driverEnv.YARN_CONTAINER_RUNTIME_DOCKER_IMAGE=$DOCKER_IMAGE_NAME
    同时将Zeppelin的Spark Interpreter的deploy-mode设置为cluster,确保Interpreter进程运行在Docker容器中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:17:40