python - Spark : Pyspark: how to monitor python worker processes

标签 python apache-spark pyspark

问题
如何根据 CPU 和内存使用情况监视 pyspark python 工作进程。

详情
根据this doc ,一个 SPARK worker 可以包含 1 个或多个 python 进程。

假设我们已经为每个运行在具有高达 200g 可用内存的 worker 上运行的执行程序分配了 40g 内存。然后根据这个记录的设置:“spark.python.worker.memory”,我们能够设置每个 python 进程的可用内存量。

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

Amount of memory to use per python worker process during aggregation, in the same format as JVM memory strings (e.g. 512m, 2g). If the memory used during aggregation goes above this amount, it will spill the data into disks.

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

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

  • 我们如何知道每个 worker/executor 上产生了多少个 pyspark/spark 进程?
  • 我们如何监控每个进程和整体消耗了多少内存,以了解我们离我们设置的“执行程序 40g”限制有多近?
  • 我们如何监控每个进程有多少溢出到磁盘?
  • 更笼统地说,我们如何使用 spark.python.worker.memory 设置优化或 pyspark 应用程序。这只是一个试错的问题吗?如果是这样,如何进行基准测试/监控(与上述类似)



为什么……好吧,我们遇到了一些与我们的应用程序非常相关的性能问题。我们正在观察一些我们无法重现的不一致错误。因此,我们必须监视/了解每次应用程序运行时发生的事情的更详细信息。

最佳答案

according to this documented setting: "spark.python.worker.memory" we are able to set the amount of memory available per python process.

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

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

How do we know how many processes pyspark/ spark is spawning on each worker/ executor?

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

How can we monitor how much memory we consume per process and overall to see how close we're at the 'executor 40g' limit we set?

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

How can we monitor how much we're spilling to disks per process?

您可以使用 Spark REST API获得一些见解,但总的来说 PySpark 指标有些有限。

关于python - Spark : Pyspark: how to monitor python worker processes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43294153/

相关文章:

python - 多次克隆一个 NumPy 数组

python - partitionBy 分配分区,但每个分区中的 WHERE

apache-spark - 如何在Kubernetes上将作业发送到Spark外部调度程序无法实例化

java - 谁执行 HBase 过滤器?

python - 连接两个 Pyspark 数据帧的两种方法有什么区别

apache-spark - 如何让 Pyspark 在两个级别聚合集合?

python - 使用临时列名而不是索引从 MySQL/Python 查询中检索数据

Python 从一个文件中创建多个文件

python - 可以结合swig生成的数据类型和ctypes函数

python - 在几个不同的值上 SparkreduceByKey