問題
集群開始放緩,可能顯示的結合以下症狀:
- 不健康的集群事件報告:
- 請求超時。司機暫時不可用。
- Metastore下降。
- DBFS下降。
- 你看不到任何高GC事件或內存利用率與驅動相關的過程。
- 當你使用前司機節點上你看到一個間歇性高平均負載。
- Ganglia相關gmetad過程顯示間歇性高CPU利用率。
- 根磁盤顯示高磁盤使用情況df - h /。具體地說,/var/lib/ganglia/rrds顯示了較高的磁盤使用情況。
- Ganglia界麵無法顯示載荷分布。
您可以驗證這個問題通過查找文件當地的的前綴/var/lib/ganglia/rrds。一般情況下,這個目錄應該隻有文件前綴應用程序——< applicationId >。
例如:
當地rw-rw-rw % sh ls -ltrhR /var/lib/ganglia/rrds/ | grep - i - 1 ganglia ganglia 616 k當地6月29日18:00 - 1593453624916. driver.databricks.directorycommit.markerreaderrors.count。rrd -rw-rw-rw - 1 ganglia ganglia 616 k當地6月29日18:00 - 1593453614595. - driver.databricks.directorycommit.deletedfilesfiltered.count.rrd -rw-rw-rw - 1 ganglia ganglia 616 k當地6月29日18:00 - 1593453614595. driver.databricks.directorycommit.autovacuumcount.count。rrd -rw-rw-rw - 1 ganglia ganglia 616 k當地6月29日18:00 - 1593453605184. driver.codegenerator.generatedmethodsize.min.rrd
導致
Ganglia指標通常使用不到10 gb的磁盤空間。然而,在某些情況下,一個“數據爆炸”發生,導致根分區填補與Ganglia指標。數據爆炸還創建一個髒緩存。Ganglia指標,當這一切發生的時候,可以使用超過100 gb的磁盤空間的根。
這個“數據爆炸”可能發生如果你火花會話變量定義為全球Python文件,然後調用函數定義在相同的文件來執行Apache火花轉換數據。當這種情況發生時,火花會話邏輯可以序列化,連同所需的函數定義,導致火花工作節點上創建會話。
例如,采取以下火花會話定義:
%從pyspark python。sql進口SparkSession def get_spark():““返回一個火花會話。””“返回SparkSession.builder.getOrCreate()如果“火花”不是在全局():火花= get_spark () def發生器(分區):打印(globals()(“火花”))為行分區:收益率(word.lower()字行(“價值”))
如果你使用下麵的示例命令,當地的前綴的文件創建:
%從再生產python導入ganglia_test df =火花。createDataFrame ((((“Hello”))((“火花”)),(“價值”))df.rdd.mapPartitions (ganglia_test.generator) .toDF((“價值”)),告訴()
的print (globals()(“火花”))聲明發電機()函數不會導致一個錯誤,因為它可以作為全局變量在工作節點。它可能會失敗,無效關鍵錯誤在某些情況下,這個值是不能作為一個全局變量。流媒體工作,執行批間隔短容易這個問題。
解決方案
確保你沒有使用SparkSession.builder.getOrCreate ()定義一個火花會話作為一個全局變量。
進行故障排除時,您可以使用文件的時間戳與當地的前綴,以幫助確定問題時改變首次引入。