問題
如何根據CPU和內存使用情況監控pyspark python工作進程。
詳細信息
根據this doc,一個SPARK工作者可以包含一個或多個python進程。
我們假設我們已經爲每個執行器分配了40g內存,這個執行器在一個擁有最多200g內存的工作器上運行。然後根據這個文檔設置:「spark.python.worker.memory」,我們可以設置每個python進程的可用內存量。
從spark.python.worker.memory設置描述引用:SPARK:Pyspark:如何監控python工作進程
的存儲器聚集期間每蟒工作進程使用,在相同的格式JVM存儲器串(例如512M,2克)的量。如果聚合過程中使用的內存高於此數量,則會將數據泄漏到磁盤中。
假設我們將spark.python.worker.memory設置爲2g。
對我來說,出現下列問題:
- 我們怎麼知道有多少進程pyspark /火花在每個工人/執行人產卵?
- 我們如何監控每個流程消耗的內存量以及整體情況,看看我們設置的「執行程序40g」限制有多接近?
- 我們如何監控每個進程溢出的磁盤數量?
- 更一般地說,我們如何使用spark.python.worker.memory設置來優化或pyspark應用程序。這只是一個試驗/錯誤的問題。如果是這樣,怎麼可以基準/監控(類似於以上)
爲什麼..好,我們打的是非常具體到我們的應用程序的一些性能問題。我們正在觀察一些我們無法再現的不一致的錯誤。因此,我們必須監視/理解每次運行應用程序時發生的事情的更精細的細節。