2016-10-28 26 views
0

我在Virtualbox上有一個3個從屬的Spark獨立羣集。我的代碼在Java上,並且它與我的小輸入數據集工作良好,它們的輸入總共大約100MB。Apache Spark:TaskResultLost(結果從塊管理器中丟失)集羣上的錯誤

設置我的虛擬機內存爲16GB,但是當我在大的輸入文件運行過程中出現我的代碼(約2GB)我在減少零件加工的小時後出現此錯誤:

Job aborted due to stage failure: Total size of serialized results of 4 tasks (4.3GB) is bigger than spark.driver.maxResultSize` 

我編輯spark-defaults.conf併爲spark.driver.maxResultSize分配了更高的金額(2GB和4GB)。它沒有幫助,同樣的錯誤出現。

不,我正在嘗試8GB的spark.driver.maxResultSize,我的spark.driver.memory也與RAM大小(16GB)相同。但我得到這個錯誤:

TaskResultLost (result lost from block manager) 

對此的任何評論?我還包括一張圖片。

我不知道問題是由大尺寸的maxResultSize引起的,還是代碼中的RDD集合。我還提供了更好理解的代碼的映射器部分。

enter image description here

JavaRDD<Boolean[][][]> fragPQ = uData.map(new Function<String, Boolean[][][]>() { 
     public Boolean[][][] call(String s) { 
      Boolean[][][] PQArr = new Boolean[2][][]; 
      PQArr[0] = new Boolean[11000][]; 
      PQArr[1] = new Boolean[11000][]; 
      for (int i = 0; i < 11000; i++) { 
       PQArr[0][i] = new Boolean[11000]; 
       PQArr[1][i] = new Boolean[11000]; 
       for (int j = 0; j < 11000; j++) { 
        PQArr[0][i][j] = true; 
        PQArr[1][i][j] = true; 

回答

2

求解:

通過增加主RAM的大小解決了這個問題。我研究了我的案例,發現基於我的設計分配32GB的RAM就足夠了。現在通過做比,我的程序工作正常,正在計算一切正確。

+0

面對類似問題(https://stackoverflow.com/questions/48455547/apache-spark2-0-taskresultlost-result-lost-from-block-manager?noredirect=1#comment83908776_48455547))你是否改變了驅動程序的內存? – user3407267

2

一般而言,該錯誤表明你正在收集/帶來大量的數據到該驅動。這不應該完成。您需要重新考慮您的應用程序邏輯。

此外,您不需要修改spark-defaults.conf來設置屬性。取而代之,您可以通過或​​中的--conf選項指定這些應用程序特定的屬性,具體取決於您如何運行作業。

+0

感謝您的回答。司機不應該做任何重要的工作,對吧? WebUI只顯示2個計數任務,只需要幾秒鐘,這是它在所有工作人員上運行的減少部分,因此驅動程序獲取數據的位置和方式不明確。沒有任何跡象表明製圖過程以及何時完成,這就是爲什麼監視變得如此混亂。 – Payf1