【问题标题】:SPARK: Pyspark: how to monitor python worker processesSPARK:Pyspark:如何监控 python 工作进程
【发布时间】: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


    【解决方案1】:

    根据这个记录在案的设置:“spark.python.worker.memory”,我们能够设置每个 python 进程可用的内存量。

    这不是真的。正如您链接的文档中所解释的那样,此设置用于控制聚合行为,而不是一般的 Python 工作内存。

    这个内存占本地对象或广播变量的大小,只是用于聚合的临时结构。

    我们如何知道 pyspark/spark 在每个 worker/executor 上产生了多少进程?

    可以生成 Python 工作线程,直到可用内核数量设置的限制。因为工作人员可以在运行时启动或终止,所以超出峰值负载的工作人员的实际数量可能会更少。

    我们如何监控每个进程和整体消耗的内存量,以了解我们与设置的“执行程序 40g”限制的接近程度?

    没有特定于 Spark 的答案。您可以使用通用监控工具或应用程序本身的resource 模块。

    我们如何监控每个进程有多少溢出到磁盘?

    您可以使用 Spark REST API 获得一些见解,但通常 PySpark 指标有些有限。

    【讨论】:

      猜你喜欢
      • 2014-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多