【问题标题】:Spark NullPointerException: Cannot invoke invalidateSerializedMapOutputStatusCache() because "shuffleStatus" is nullSpark NullPointerException:无法调用 invalidateSerializedMapOutputStatusCache(),因为 \"shuffleStatus\" 为空
【发布时间】:2022-09-28 22:12:52
【问题描述】:

我正在使用 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

我提交了票SPARK-40582

    标签: java apache-spark spark-shuffle


    【解决方案1】:

    我提交了SPARK-40582,他们告诉我这是一个已知的 Scala 2.13.8 问题 (#12613)。他们在SPARK-39553 中添加了一个修复程序,计划在 v3.3.1 中发布。

    【讨论】:

      【解决方案2】:

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

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

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

      Spark 对数据进行洗牌,在洗牌期间,找不到一些根据 id 应该存在的数据。

      选项1: 尝试增加分配给您的应用程序的内存,看看是否能解决这个问题。

      选项2:对各种用例进行单元测试,看看是否能在遇到问题时找到用例。

      选项 3:尝试较早版本的 spark。

      【讨论】:

      • 我对此投了反对票,因为 1)你不知道;你甚至不使用这个工具; 2)您刚刚粘贴了一些链接; 3)您的建议是一般性的,“重新启动计算机”类型的问题没有提供特定于此问题的价值。
      猜你喜欢
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-18
      • 2022-11-19
      • 2022-01-05
      • 1970-01-01
      相关资源
      最近更新 更多