【发布时间】:2017-04-09 18:49:16
【问题描述】:
问题
如何根据 CPU 和内存使用情况监控 pyspark python 工作进程。
详情
根据this doc,一个 SPARK worker 可以包含 1 个或多个 python 进程。
假设我们为每个执行程序分配了 40g 内存,该执行程序运行在具有高达 200g 内存的工作人员上。然后根据这个记录在案的设置:“spark.python.worker.memory”,我们可以设置每个 python 进程可用的内存量。
引用自 spark.python.worker.memory 设置说明:
聚合期间每个 python 工作进程使用的内存量,格式与 JVM 内存字符串相同(例如 512m、2g)。如果在聚合期间使用的内存超过此数量,则会将数据溢出到磁盘中。
假设我们将 spark.python.worker.memory 设置为 2g。
对我来说,出现以下问题:
- 我们如何知道 pyspark/ spark 在每个 worker/executor 上产生了多少进程?
- 我们如何监控每个进程和整体消耗的内存量,以了解我们与设置的“执行程序 40g”限制的接近程度?
- 我们如何监控每个进程有多少溢出到磁盘?
- 更一般地说,我们如何使用 spark.python.worker.memory 设置优化或 pyspark 应用程序。这只是一个试验/错误的问题。如果是这样,如何进行基准测试/监控(类似于上面)
为什么......好吧,我们遇到了一些非常特定于我们的应用程序的性能问题。我们正在观察一些无法重现的不一致错误。因此,我们必须监控/了解每次应用程序运行时发生的事情的更详细的细节。
【问题讨论】:
标签: python apache-spark pyspark