【问题标题】:SPARK 2.4 Standalone + Multiple Workers on a single multi-core server; Submissions are waiting on resourcesSPARK 2.4 Standalone + 单个多核服务器上的多个 Worker;提交正在等待资源
【发布时间】:2018-12-21 07:29:32
【问题描述】:

在配置合理的 64 位 Fedora(家庭)服务器上,带有 12-Cores64gb-RAM,我有 Spark 2.4Standalone 模式下运行,./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 MASTERWORKERS 后,我只使用两个指向此 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


    【解决方案1】:

    您是否启动了随机播放服务?如果没有,你需要这样做:

    $SPARK_HOME_DIR/sbin/start-shuffle-service.sh
    

    然后您需要启用动态分配并向您的 sparkSession 指定启用随机播放服务。

    为此,请在您的 SparkConf() 中声明它:

    spark.dynamicAllocation.enabled = true
    spark.shuffle.service.enabled = true
    

    看看: https://spark.apache.org/docs/latest/configuration.html#dynamic-allocation

    一旦您等待“spark.dynamicAllocation.executorIdleTimeout”时间,执行程序将被删除。您可以在 Standalone Master UI 和 Spark 应用 UI 上看到这一点。

    另一个好链接:https://dzone.com/articles/spark-dynamic-allocation

    【讨论】:

    • 您好,欢迎来到 StackOverflow!这是一个很好的答案。我不知道shuffle service。当我有时间的时候,我会尝试你的指示,然后回到这里。谢谢你的建议!
    猜你喜欢
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 2015-07-10
    相关资源
    最近更新 更多