【发布时间】:2018-12-21 07:29:32
【问题描述】:
在配置合理的 64 位 Fedora(家庭)服务器上,带有 12-Cores 和 64gb-RAM,我有 Spark 2.4 在 Standalone 模式下运行,./spark-env.sh 中的配置如下(未显示的是该文件中我已注释掉的项目):
# =====================================================================
# Options for the daemons used in the standalone deploy mode
# =====================================================================
export SPARK_MASTER_HOST=dstorm
export SPARK_MASTER_PORT=7077
export SPARK_MASTER_WEBUI_PORT=8080 # JupyterLab uses port 8888.
# ---------------------------------------------------------------------
export SPARK_WORKER_CORES=3 # 12 # To Set number of worker cores to use on this machine.
export SPARK_WORKER_MEMORY=4g # Total RAM workers have to give executors (e.g. 2g)
export SPARK_WORKER_WEBUI_PORT=8081 # Default: 8081
export SPARK_WORKER_INSTANCES=4 # 5 # Number of workers on this server.
# ---------------------------------------------------------------------
export SPARK_DAEMON_MEMORY=1g # To allocate to MASTER, WORKER and HISTORY daemons themselves (Def: 1g).
# =====================================================================
# =====================================================================
# Generic options for the daemons used in the standalone deploy mode
# =====================================================================
export SPARK_PID_DIR=${SPARK_HOME}/pid # PID file location.
# =====================================================================
在此配置下启动 Spark MASTER 和 WORKERS 后,我只使用两个指向此 Spark Standalone 的 Notebook 选项卡启动 Jupyter集群。
我的问题是只有一个笔记本选项卡的单元格——大约第 5 或第 6 个单元格——消耗了所有核心;让第二个选项卡处于饥饿状态,停止第二个选项卡中的所有进度,因为它等待(但永远不会获得)资源。我可以在 SparkUI 中确认这一点:具有 所有内核 的第一个 Notebook 选项卡的 RUNNING 状态;以及 0-Cores 的第二个标签的 WAITING 状态。尽管第一个 Notebook 已经完成了它的运行(即到达底部并完成了它的最后一个单元格)这一事实。
顺便说一下,这种等待并不局限于 Jupyter。如果我接下来在 CLI 上启动 Python/PySpark 并连接到同一个集群,它也必须等待。
在所有三种情况下,我都会收到这样的session:
spark_sesn = SparkSession.builder.config(conf = spark_conf).getOrCreate()
请注意,这些笔记本选项卡或 CLI 上没有任何繁重的工作。相反,它非常轻巧(仅用于测试)。
我是否配置有问题,或者我的基本分配概念不正确?我认为这里应该多路复用,而不是阻塞。也许这是一个会话共享问题? (即.getOrCreate())。
我尝试过使用 CORES + WORKER-INSTANCES 组合(例如分别为 12 x 5),但出现了同样的问题。
嗯。好吧,我会继续调查(该睡觉了)。 =:)
提前感谢您的意见和见解。
【问题讨论】:
标签: apache-spark pyspark jupyter-notebook apache-spark-standalone