PySpark 中 CPU 消耗异常高

Mat*_*get 5 apache-spark pyspark

我们有一个在 Mesos 集群上运行的中等规模的 PySpark 程序。

我们用spark.executor.cores=8和运行程序spark.cores.max=24。每个 Mesos 节点有 12 个 vcpu,因此每个节点上只启动 1 个 executor。

程序运行完美,结果正确。

然而,问题是每个执行器消耗的 CPU 比 8 多得多。 CPU 负载经常达到 25 或更多。通过该htop程序,我们看到 8 个 python 进程按预期启动。但是,每个 Python 会产生多个线程,因此每个 Python 进程最多可以使用 300% 的 CPU。

顶视图

这种行为在共享集群部署中很烦人。

有人可以解释这种行为吗?pyspark 启动的这 3 个附加线程是什么?

附加信息:

  • 我们在 Spark 操作中使用的函数不是多线程的
  • 我们在本地模式下有相同的行为,在 Mesos 之外
  • 我们使用 Spark 2.1.1 和 Python 3.5
  • 除了通常的基本服务之外,没有其他东西在 Mesos 节点上运行
  • 在我们的测试平台中,Mesos 节点实际上是 OpenStack VM