我在火花流應用程序中的驅動程序進程有問題。問題是驅動程序進程內存不足。主節點和工作節點都沒有問題(它們都運行良好,連續數天)。但即使使用非常有限的饋送(每5分鐘發送兩條消息,處理1條消息的時間少於100毫秒),我會在一段時間後(例如,週末)在驅動程序過程中發生oom錯誤。火花流驅動程序進程內存不足
以下是詳細信息:
我有一個簡單的火花流媒體應用程序,從MQTT數據源消耗事件,並在數據庫中存儲這些。我正在使用一個具有1個主節點和2個工作節點的小型火花集羣。我有1個驅動程序進程(開始使用spark-submit和部署模式客戶端)提供集羣。我在Ubuntu上使用Java8(Oracle VM)運行spark-1.4.1-bin-hadoop2.6。
我的驅動程序基本上如下:
JavaReceiverInputDStream<String> messages = createInputDStream(ssc);
messages.mapPartitions(...).mapToPair(...).updateStateByKey(...).
foreachRDD(rdd -> {
rdd.foreach(ne -> {
});
return null;
});
我已經做了初步調查。如果我參加了駕駛過程中的堆轉儲收集實例的直方圖(JMAP -histo),我通常會看到這樣的東西:
1: 36388 81204168 [B
2: 407486 32826432 [C
3: 40849 25067224 [I
4: 367245 8813880 scala.collection.immutable.$colon$colon
5: 311000 7464000 java.lang.String
6: 114294 7314816 org.apache.spark.storage.RDDInfo
我注意到,隨着時間的推移,RDDInfo對象的數量在增加。堆轉儲顯示大部分RDDINfo對象保留在JobProgressListener的stageIdToData映射中。看看這個類的代碼,它似乎應該注意丟棄舊數據。因此,我已經在conf/spark-defaults.conf中設置了
spark.ui.retainedJobs 50
spark.ui.retainedStages 50
。但是這並沒有幫助。從我的轉儲中,我看到這個stageIdToData地圖包含1897個條目。鑑於上述配置設置,這看起來很奇怪。
我在這裏做錯了什麼,或者這是一個火花問題?
您是否解決了這個問題?我遇到了與檢查點到S3相同的問題。 – Navneet
我不這麼認爲。很久以前,我很久以前就開始工作了。 – user2519865