文档首页/ MapReduce服务 MRS/ 开发指南(普通版_2.x及之前)/ Spark开发指南/ Spark应用开发常见问题/ 运行SparkStreamingKafka样例工程时报“类不存在”问题
更新时间:2024-08-03 GMT+08:00

运行SparkStreamingKafka样例工程时报“类不存在”问题

问题

通过spark-submit脚本提交KafkaWordCount(org.apache.spark.examples.streaming.KafkaWordCount)任务时,日志中报Kafka相关的类不存在的错误。KafkaWordCount样例为Spark开源社区提供的。

回答

Spark部署时,如下jar包存放在客户端的“$SPARK_HOME/jars/streamingClient”目录以及服务端的“/opt/Bigdata/MRS/FusionInsight-Spark-2.2.1/spark/jars/streamingClient”目录:

  • kafka-clients-0.8.2.1.jar
  • kafka_2.10-0.8.2.1.jar
  • spark-streaming-kafka_2.10-1.5.1.jar

由于$SPARK_HOME/lib/streamingClient/*默认没有添加到classpath,所以需要手动配置。

在提交应用程序运行时,在命令中添加如下参数即可:

--jars $SPARK_CLIENT_HOME/jars/streamingClient/kafka-clients-0.8.2.1.jar,$SPARK_CLIENT_HOME/jars/streamingClient/kafka_2.10-0.8.2.1.jar,$SPARK_CLIENT_HOME/jars/streamingClient/park-streaming-kafka_2.10-1.5.1.jar

用户自己开发的应用程序以及样例工程都支持上述参数。

但是Spark开源社区提供的KafkaWordCount等样例程序,不仅需要添加--jars参数,还需要配置其他,否则会报“ClassNotFoundException”错误,yarn-client和yarn-cluster模式下稍有不同。

  • yarn-client模式下

    在除--jars参数外,在客户端“spark-defaults.conf”配置文件中,将“spark.driver.extraClassPath”参数值中添加客户端依赖包路径,如“$SPARK_HOME/lib/streamingClient/*”

  • yarn-cluster模式下

    除--jars参数外,还需要配置其他,有三种方法任选其一即可,具体如下。

    • 在客户端spark-defaults.conf配置文件中,在“spark.yarn.cluster.driver.extraClassPath”参数值中添加服务端的依赖包路径,如“/opt/huawei/Bigdata/FusionInsight/spark/spark/lib/streamingClient/*”
    • 将各服务端节点的“spark-examples_2.10-1.5.1.jar”包删除。
    • 在客户端“spark-defaults.conf”配置文件中,修改或增加配置选项“spark.driver.userClassPathFirst = true”