簡體   English   中英

Spark NullPointerException:無法調用 invalidateSerializedMapOutputStatusCache(),因為“shuffleStatus”是 null

[英]Spark NullPointerException: Cannot invoke invalidateSerializedMapOutputStatusCache() because "shuffleStatus" is null

我正在使用 Java 17 和 UDF 在 Windows 10 上運行一個簡單的小 Spark 3.3.0 管道。 我幾乎沒有做任何有趣的事情,現在當我只在 30,000 條記錄上運行管道時,我得到了這個:

[ERROR] Error in removing shuffle 2
java.lang.NullPointerException: Cannot invoke "org.apache.spark.ShuffleStatus.invalidateSerializedMapOutputStatusCache()" because "shuffleStatus" is null
        at org.apache.spark.MapOutputTrackerMaster.$anonfun$unregisterShuffle$1(MapOutputTracker.scala:882)
        at org.apache.spark.MapOutputTrackerMaster.$anonfun$unregisterShuffle$1$adapted(MapOutputTracker.scala:881)
        at scala.Option.foreach(Option.scala:437)
        at org.apache.spark.MapOutputTrackerMaster.unregisterShuffle(MapOutputTracker.scala:881)
        at org.apache.spark.storage.BlockManagerStorageEndpoint$$anonfun$receiveAndReply$1.$anonfun$applyOrElse$3(BlockManagerStorageEndpoint.scala:59)
        at scala.runtime.java8.JFunction0$mcZ$sp.apply(JFunction0$mcZ$sp.scala:17)
        at org.apache.spark.storage.BlockManagerStorageEndpoint.$anonfun$doAsync$1(BlockManagerStorageEndpoint.scala:89)
        at scala.concurrent.Future$.$anonfun$apply$1(Future.scala:678)
        at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:467)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at java.base/java.lang.Thread.run(Thread.java:833)

我搜索並找不到錯誤消息中的任何主要術語。

令人不安的是,Spark 正在打破似乎是處理的基本部分,並且出現NullPointerException

更新:現在它只發生了 1000 條記錄。 但后來我立即重新運行管道,沒有任何變化,它成功了。 所以這個NullPointerException錯誤是不確定的。 一點都不好。

好的,我不知道 Spark,但我在下面提到了 2 頁。

https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/MapOutputTracker.scala unregisterShuffle 方法

https://www.hadoopinrealworld.com/how-does-shuffle-sort-merge-join-work-in-spark/

Spark 對數據進行洗牌,在洗牌期間,找不到一些根據 id 應該存在的數據。

選項 1:嘗試增加分配給您的應用程序的 memory 以查看是否可以解決此問題。

選項2:對各種用例進行單元測試,看看是否能在遇到問題時找到用例。

選項 3:嘗試較早版本的 spark。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM