IDEA调试Spark小结

时间:2022-04-13 09:20:47

本文记录下直接在IDEA中运行调试Spark代码踩到的几个小坑。下面用的是tag v2.1.0的代码。

本地运行org.apache.spark.examples.sql.SparkSQLExample,需要加上-Dspark.master=local
IDEA调试Spark小结

然后遇到了下面几个错误,

编译时错误

  • 找不到org.apache.spark.sql.catalyst.parser.SqlBaseParser。使用了ANTLR来生成SQLParser导致的,直接在spark-catalyst工程下执行mvn clean compile就可以了,然后需要将生成的target/generated-sources/antlr4目录mark as sources,
    IDEA调试Spark小结

PS: mark的时候要避免mark了多层,例如上图中把target也mark了会出现各种XXX is already defined as XXX这样的错误

  • 找不到org.apache.spark.streaming.flume.sink.SparkFlumeProtocol。使用了Avro Protocol导致的,打开Maven Projects视图,对Flume Sink工程执行generate sources,
    IDEA调试Spark小结

然后同样需要将生成的target下的compiled_avro目录mark as sources,
IDEA调试Spark小结

运行时错误

  • 各种ClassNotFoundException。这是因为example工程里面很多的依赖的scope都是provided,本地运行时就找不到了。我们可以直接在IDEA里面修改scope而不用去改pom里面的配置,
    IDEA调试Spark小结

但是这样一个一个改实在太蠢了,可以直接修改spark-examples_2.11.iml,将里面的scope="PROVIDED" 全都替换成空就可以了。

  • 找不到spark-version-info.properties
Caused by: org.apache.spark.SparkException: Error while locating file spark-version-info.properties
at org.apache.spark.package$SparkBuildInfo$.liftedTree1$1(package.scala:75)
at org.apache.spark.package$SparkBuildInfo$.<init>(package.scala:61)
at org.apache.spark.package$SparkBuildInfo$.<clinit>(package.scala)

如下图添加一个空的spark-version-info.properties文件就可以了,
IDEA调试Spark小结


alright,现在可以愉快的调Spark的代码了,have fun^_^