SPARK:Pyspark:如何监视python工作进程
问题SPARK:Pyspark:如何监视python工作进程,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,问题 如何根据CPU和内存使用情况监控pyspark python工作进程 详细信息 根据,一个SPARK worker可以包含一个或多个python进程。 让我们假设我们已经为每个运行在一个工作进程上的执行器分配了40g内存,这个工作进程有多达200g的可用内存。然后根据这个有文档记录的设置:“spark.python.worker.memory”,我们可以设置每个python进程的可用内存量 引自spark.python.worker.memory设置说明: 聚合期间每个python工作
如何根据CPU和内存使用情况监控pyspark python工作进程
详细信息
根据,一个SPARK worker可以包含一个或多个python进程。
让我们假设我们已经为每个运行在一个工作进程上的执行器分配了40g内存,这个工作进程有多达200g的可用内存。然后根据这个有文档记录的设置:“spark.python.worker.memory”,我们可以设置每个python进程的可用内存量
引自spark.python.worker.memory设置说明: 聚合期间每个python工作进程使用的内存量,格式与JVM内存字符串相同(例如512m、2g)。如果聚合期间使用的内存超过此数量,则会将数据溢出到磁盘中 假设我们将spark.python.worker.memory设置为2g
对我来说,出现了以下问题:
- 我们如何知道pyspark/spark在每个工作者/执行者上生成了多少个进程
- 我们如何监控每个进程和整个进程消耗的内存量,以了解我们离设置的“executor 40g”限制有多近
- 我们如何监控每个进程向磁盘溢出的量
- 更一般地说,我们如何使用spark.python.worker.memory设置优化或pyspark应用程序。这只是一个试错的问题吗。如果是,如何进行基准测试/监控(类似于上述内容)
为什么?我们遇到了一些特定于应用程序的性能问题。我们观察到一些我们无法重现的不一致的错误。因此,我们必须监视/了解每次应用程序运行时发生的事情的更详细信息 根据这个有文档记录的设置:“spark.python.worker.memory”,我们可以设置每个python进程的可用内存量 事实并非如此。正如您链接的文档中所解释的,此设置用于控制聚合行为,而不是一般的Python工作内存 该内存考虑了本地对象或广播变量的大小,仅用于聚合的临时结构 我们如何知道pyspark/spark在每个工作者/执行者上生成了多少个进程 Python工作线程的数量可以达到可用内核数量设置的限制。由于在运行时可以启动或终止工作进程,因此峰值负载之外的实际工作进程数可能会更小 我们如何监控每个进程和整个进程消耗的内存量,以了解我们离设置的“executor 40g”限制有多近 没有具体的答案。您可以从应用程序本身使用常规监视工具或模块 我们如何监控每个进程向磁盘溢出的量 您可以使用Spark获得一些见解,但一般来说,PySpark指标有一定的局限性