Maven项目中org.apache.hadoop.conf.Configuration类找不到问题求助
这个错误的核心原因很明确:你的hadoop-common依赖使用了<scope>provided</scope>,导致编译时IDE能找到类,但运行时该依赖不会被打包到你的应用中,JVM找不到对应的类文件。
具体解决步骤:
修正
hadoop-common的依赖范围
打开你的pom.xml,找到hadoop-common的依赖配置,移除<scope>provided</scope>标签,修改后如下:<dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.2.0</version> </dependency>解释:
providedscope表示该依赖由运行环境(比如Spark集群)提供,但在本地开发运行时,你的环境并没有自动加载这个jar,所以必须把它纳入打包范围。如果之后要提交到集群运行,你可以再把scope改回provided,避免重复打包依赖。修复Scala版本依赖冲突
注意到你的spark-streaming-kafka_2.10依赖使用了Scala 2.10版本,但其他Spark依赖(比如spark-core_2.11)都是Scala 2.11版本,这会导致严重的依赖冲突,可能引发更多类加载问题。你需要把spark-streaming-kafka的artifactId改成对应Scala 2.11的版本,同时匹配Spark 2.1.1的兼容版本,比如:<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-streaming-kafka-0-10_2.11</artifactId> <version>2.1.1</version> <!-- 本地运行可以去掉provided,集群运行再加上 --> <!-- <scope>provided</scope> --> </dependency>(注:Spark 2.1.1对应的kafka流推荐使用
spark-streaming-kafka-0-10_2.11,而不是旧的spark-streaming-kafka_2.10)验证依赖并重新构建
修改完成后,执行mvn clean install重新构建项目,确保所有依赖都正确下载并打包到你的应用中。本地运行时,记得刷新IDE的Maven依赖(比如IntelliJ点击Maven面板的"Reload All Maven Projects"按钮),确保IDE能加载最新的依赖配置。
额外提示:
若后续提交到Spark集群运行,记得将Spark相关依赖的scope改回provided,因为集群环境已经包含这些依赖,重复打包会增加jar包体积甚至引发冲突。
内容的提问来源于stack exchange,提问作者Abhay Dandekar

