我正在 AWS EMR 中部署 Spark 作业,并使用 docker 打包所有依赖项。我的 python 化 Spark 提交命令如下所示
...
cmd = (
f"spark-submit --deploy-mode cluster "
f"spark-submit --deploy-mode {deploy_mode} "
f"--conf spark.executorEnv.YARN_CONTAINER_RUNTIME_TYPE=docker "
f"--conf spark.executorEnv.YARN_CONTAINER_RUNTIME_DOCKER_IMAGE={docker_image} "
f"--conf spark.executorEnv.YARN_CONTAINER_RUNTIME_DOCKER_CLIENT_CONFIG={config} "
f"--conf spark.executorEnv.YARN_CONTAINER_RUNTIME_DOCKER_MOUNTS=/etc/passwd:/etc/passwd:ro "
f"--conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_TYPE=docker "
f"--conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_DOCKER_IMAGE={docker_image} "
f"--conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_DOCKER_CLIENT_CONFIG={config} "
f"--conf spark.yarn.appMasterEnv.YARN_CONTAINER_RUNTIME_DOCKER_MOUNTS=/etc/passwd:/etc/passwd:ro "
f"{path}"
)
...
当我的 deploy_mode
为集群时,它按预期工作,但当 deploy_mode
为客户端时,我看不到任何 docker 依赖项。谁能帮忙解释为什么会发生这种情况,这是否正常?
最佳答案
docker 容器由 EMR 上的 Yarn 管理:https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-docker.html
在客户端模式下,您的 Spark 驱动程序不会在 docker 容器中运行,因为该进程不受 Yarn 管理,而是直接在运行 spark-submit
命令的节点上执行。
在集群模式下,您的驱动程序由 Yarn 管理,并在 docker 容器内执行。
关于amazon-web-services - 使用 Docker 时的 EMR Spark 部署模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71780140/