
# 运行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"。
   
 
