我有困難在磚與數據,我們是不允許保存或保存。數據來自一個API()返回一個JSON響應。我們有一個scala包在我們的集群,使查詢(查詢近6 k),保存到dataframe,然後爆炸,dataframe到一個新的dataframe,我們可以使用它來獲取我們需要的信息。然而,所有數據被收集到司機節點。然後,當我們試圖運行比較/驗證/使用結果dataframe火花代碼,它不會分配工作(司機試圖盡)和占用所有司機的JVM堆內存。
我們得到的兩個錯誤是“OutOfMemoryError: Java堆空間”或“意外引發司機已經停止並重新啟動。你的筆記本將會自動重新接好。”
我們有一個64 gb的司機(5 32 gb節點)和馬克斯JVM堆內存增加到25 gb。而是因為它不會分發的工作節點,司機要保持與伯父崩潰的錯誤。
運行很好當我們做保存這個數據和運行我們的拚花火花代碼/比較拚花(分配好工作),但是,每一個協議與數據所有者,這樣我們隻能保存數據用於發展生產)(目前不是一個可行的選擇。
我們已經試過的東西:
刪除所有顯示/打印/日誌
緩存dataframe(和之前/之後dataframes它連接)與.cache () / .count()和火花。sql(緩存表<表>)
提高司機的大小節點64 gb
增加JVM堆大小25 gb
從dataframe移除不需要的列
習語.repartition dataframe (300)
非常感謝您的幫助。
請檢查你的代碼.collect()或類似的功能。收集伯父錯誤是最受歡迎的原因。下一步,請分析火花UI——尋找數據泄漏。當數據寫入內存驅動和背部,因為它太大了,適合在內存中。
我複製粘貼下麵的列表優化技術。也許下麵的一個將幫助: