SPARK:Pyspark:如何监控python worker进程

时间:2017-04-08 12:35:00

标签: python apache-spark pyspark

问题
如何在CPU和内存使用方面监视pyspark python worker进程。

详情
根据{{​​3}},一个SPARK工作者可以包含一个或多个python进程
假设我们已经为每个执行器分配了40g内存,该内存在一个具有高达200g可用内存的工作器上运行。然后根据这个记录的设置:“spark.python.worker.memory”我们可以设置每个python进程可用的内存量。

引自spark.python.worker.memory设置说明:

  

聚合期间每个python worker进程使用的内存量,格式与JVM内存字符串相同(例如512m,2g)。如果聚合期间使用的内存超过此数量,则会将数据溢出到磁盘中。

我们假设我们将spark.python.worker.memory设置为2g。

对我来说,出现了以下问题:

  • 我们如何知道pyspark / spark在每个worker / executor上产生了多少进程?
  • 我们如何监控每个流程消耗多少内存,以及我们设置的'执行者40g'限制的接近程度?
  • 我们如何监控每个进程对磁盘的溢出程度?
  • 更一般地说,我们如何使用spark.python.worker.memory设置优化或使用pyspark应用程序。这只是一个试验/错误的问题。如果是这样,如何基准/监控(类似于上面)



为什么......我们正在遇到一些非常特定于我们应用程序的性能问题。我们正在观察一些我们无法重现的不一致错误。因此,我们必须在每次运行应用程序时监视/理解所发生情况的更精细细节。

1 个答案:

答案 0 :(得分:2)

  

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

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

此内存记录了本地对象或广播变量的大小,仅用于聚合的临时结构。

  

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

可以生成Python工作者,达到可用核心数设置的限制。因为在运行期间可以启动或杀死工人,所以在峰值负载之外的实际工作人员数量可以更小。

  

我们如何监控每个进程消耗多少内存,以及我们设置的'执行者40g'限制的接近程度?

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

  

我们如何监控每个进程对磁盘的溢出程度?

您可以使用Spark REST API获取一些见解,但一般来说PySpark指标有些限制。