问题
如何在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。
对我来说,出现了以下问题:
为什么......我们正在遇到一些非常特定于我们应用程序的性能问题。我们正在观察一些我们无法重现的不一致错误。因此,我们必须在每次运行应用程序时监视/理解所发生情况的更精细细节。
答案 0 :(得分:2)
根据这个记录的设置:“spark.python.worker.memory”我们可以设置每个python进程可用的内存量。
事实并非如此。正如您在链接的文档中所解释的那样,此设置用于控制聚合行为,而不是一般的Python工作者内存。
此内存记录了本地对象或广播变量的大小,仅用于聚合的临时结构。
我们如何知道pyspark / spark在每个worker / executor上产生了多少进程?
可以生成Python工作者,达到可用核心数设置的限制。因为在运行期间可以启动或杀死工人,所以在峰值负载之外的实际工作人员数量可以更小。
我们如何监控每个进程消耗多少内存,以及我们设置的'执行者40g'限制的接近程度?
没有Spark特定的答案。您可以使用应用程序本身的常规监视工具或resource
模块。
我们如何监控每个进程对磁盘的溢出程度?
您可以使用Spark REST API获取一些见解,但一般来说PySpark指标有些限制。