gpt4 book ai didi

java - Apache Spark 作业在本地运行,但在 Google Cloud 集群上抛出空指针

转载 作者:行者123 更新时间:2023-12-01 18:06:48 26 4
gpt4 key购买 nike

我有一个 Apache Spark 应用程序,到目前为止我一直在使用命令在本地计算机上运行/测试:

spark --class "main.SomeMainClass" --master local[4] jarfile.jar

一切都运行正常,但是当我向 Google Cloud Dataproc Engine 提交相同的作业时,它会抛出 NullPointerException,如下所示:

Caused by: java.lang.NullPointerException
at geneticClasses.FitnessCalculator.calculateFitness(FitnessCalculator.java:30)
at geneticClasses.StringIndividualMapReduce.calculateFitness(StringIndividualMapReduce.java:91)
at mapreduce.Mapper.lambda$mapCalculateFitness$3d84c37$1(Mapper.java:30)
at org.apache.spark.api.java.JavaPairRDD$$anonfun$pairFunToScalaFun$1.apply(JavaPairRDD.scala:1018)
at
.
.
.

此错误是从工作节点抛出的,因为它发生在 map 阶段。除了本地模式只是将工作节点模拟为单独的线程之外,本地模式和实际集群有什么区别? FitnessCalculator 位于驱动程序节点上,所有方法都是静态的。我是否需要使其可序列化,以便它可以与其他代码一起发送到工作节点?

谢谢

最佳答案

您说 FitnessCalculator 仅具有静态方法并且它在本地模式下工作。我的猜测是,您在驱动程序中设置了一些静态对象(初始化为 null),然后尝试在 FitnessCalculator.java:30 的 Spark 任务中使用。不幸的是,这行不通。

对静态字段的更改不会分发给 Spark 工作线程。它在本地模式下工作的原因是工作线程与驱动程序在同一个 JVM(Java 虚拟机)中运行,因此它们恰好可以访问新值。

关于java - Apache Spark 作业在本地运行,但在 Google Cloud 集群上抛出空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35780732/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com