【问题标题】:Why there are more python processes than the number of cores in Spark?为什么 python 进程比 Spark 中的内核数多?
【发布时间】:2016-07-17 22:03:36
【问题描述】:

我正在 ipython 控制台中运行 pyspark 作业。我将 spark master 设置为local[4]。因此,我希望驱动程序有一个内核,应该是一个 Java 进程,而其他三个内核各运行一个 Python 进程。不过,这是我top的截图,

为什么有 16 个 python 进程?为什么不是只有 3 个 python 进程?如果我没记错的话,这台服务器上的内核总数是 16。

【问题讨论】:

  • python为什么要关心java进程?
  • @YOU 根据我对 PySpark 的理解,当 Spark 执行器中的核心需要运行任务时,它会启动一个 Python 进程来进行实际计算。由于我指定了local[4],因此一个内核将用于驱动程序,而其他三个内核中的每一个都将启动一个 python 进程来计算任务。
  • 相关:youtube.com/…
  • @Kristian 谢谢。这个视频很有帮助。所以当我将master设置为local[N]时,Spark会启动一个带有N潜在线程的executor(只有一个JVM)来运行任务。在我的示例中,我有 4 个潜在的线程来运行任务。但视频中也提到Spark也有一些“内部线程”,所以“没有办法让线程数和核心数相匹配”。但这并不能解释为什么有这么多 Python 进程。我想我需要了解 pyspark 的工作原理。

标签: python apache-spark ipython pyspark


【解决方案1】:

如果您还没有这样做,请查看here

您决定使用四个工作人员,默认情况下每个工作人员都有一个执行者。但是,一个 executor 正在运行几个任务,每个任务都是一个 python 进程。

here 给出了有关该主题的出色解释。

【讨论】:

  • 该引用似乎只与集群模式有关。我在单台计算机上使用本地模式。所以只有一个执行器有多个线程。我的理解是每个线程都会启动 Python 来运行一个任务。也许我的理解是错误的。
  • @PanChao 我想你对here 提到的“工作线程”感到困惑。默认情况下,worker = Executor,因此它实际上会产生多个 python 线程,每个线程处理一个 Task。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 2019-02-20
  • 2015-01-05
  • 2015-06-29
  • 1970-01-01
  • 2014-07-20
  • 1970-01-01
相关资源
最近更新 更多