我有一個150G的txt文件(大約700個文件,平均每個200 MB)的文件夾。Spark內存不足
我正在使用scala來處理文件並計算最後的一些彙總統計信息。我看到兩種可能的方法來做到這一點:
- 通過所有的文件手動循環,做到每個文件計算和合併到底
- 讀取整個文件夾複製到一個RDD結果,做所有的操作這種單一的RDD,讓火花做所有的並行
我傾向於第二種方法,因爲它似乎更清潔(無需並行特定代碼),但我想知道如果我的方案將符合規定的約束通過我的硬件和數據。我有一個帶有16個線程和64 GB RAM的工作站(所以在不同處理器內核之間的並行化將是嚴格局部的)。我稍後可能會用更多的機器擴展基礎架構,但現在我只想專注於調整這一個工作站場景的設置。
我正在使用的代碼: - 讀取TSV文件和有意義的數據提取到(字符串,字符串,字符串)三胞胎 - 事後一些濾波,映射和執行分組 - 最後,數據被減小,並且一些聚合計算
我已經能夠用一個文件(〜200 MB的數據)運行此代碼,但是我得到一個java.lang.OutOfMemoryError:GC開銷限制超出 和/或Java出當添加更多的數據時(應用程序中斷了6GB的數據,但我想用150GB的數據),堆異常。我想我將不得不調整一些參數,使這項工作。我將不勝感激關於如何解決這個問題的任何提示(如何調試內存需求)。我試着增加'spark.executor.memory'並使用較少數量的內核(每個內核需要一些堆空間的理性存在),但這並沒有解決我的問題。
我不需要解決方案非常快(如果需要,它可以輕鬆運行幾個小時甚至幾天)。我也沒有緩存任何數據,而是最終將它們保存到文件系統。如果您認爲採用手動並行化方法會更可行,那麼我也可以這樣做。
如果您以獨立模式運行Spark,則無法工作。您需要在資源管理器上運行您的應用程序,例如在Hadoop集羣上運行的每個示例的「YARN」。 – eliasah
在單臺機器上運行YARN有意義嗎?如果沒有分佈式集羣存在,那麼獨立模式(如果配置正確)與集羣管理器的工作方式不同? – Igor
如果您不打算使用分佈式集羣,您將如何在64RAM上安裝150G? – eliasah