如何在 "local-cluster" 模式下对 Spark 程序进行 scala 测试?

How to scala-test a Spark program under "local-cluster" mode?

我有一个 Spark 程序,它在本地模式下具有非常完整的测试套件,但是当部署在 Spark 集群上时,它演示了几个序列化和同步问题,测试套件无法检测到这些问题。

因此我想将这些测试迁移到本地集群模式。这是我的 SparkConf 设置:

new SparkConf().setAppName("unit")
.setMaster("local-cluster[2,4,1024]")
.setAppName("DataPassportSparkTest")
.setSparkHome(System.getenv("SPARK_HOME"))
.set("spark.driver.classpath", sys.props("java.class.path"))
.set("spark.executor.classpath", sys.props("java.class.path"))
.set("spark.executor.memory", "1g")
.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")

然而,我尝试将 java class 路径添加到 Spark 应用程序中似乎无缘无故地失败了,因此 Spark 总是抱怨找不到我的 class。有没有办法通知 Spark 我的 classpath 存在?

好吧,这是一个愚蠢的错误,我只需要将 "classpath" 替换为 "extraClassPath":

new SparkConf().setAppName("unit")
.setMaster("local-cluster[2,4,1024]")
.setAppName("DataPassportSparkTest")
.setSparkHome(System.getenv("SPARK_HOME"))
.set("spark.driver.extraClassPath", sys.props("java.class.path"))
.set("spark.executor.extraClassPath", sys.props("java.class.path"))
.set("spark.executor.memory", "1g")
.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")