使用Java+Spark在Eclipse连接GCP Dataproc Hive Server报Hive类缺失错误
问题根因
报错的直接原因是你的pom.xml中spark-sql_2.11、spark-hive_2.11两个依赖的scope设置为了provided。该配置表示Maven仅在编译、测试阶段加载对应依赖,运行时默认认为目标环境已预装对应类包,不会将依赖打入最终产物。你当前在本地Eclipse环境直接启动应用,本地运行环境没有预装Spark Hive相关依赖,因此触发类找不到的异常。
解决方案
分两种场景处理:
本地调试场景
直接修改这两个依赖的scope配置,删除<scope>provided</scope>行,默认使用compile范围即可:
<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.11</artifactId> <version>2.4.7</version> <exclusions> <exclusion> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-hive_2.11</artifactId> <version>2.4.7</version> </dependency>
修改完成后刷新Maven依赖,重启应用即可解决报错。
打包提交到Dataproc集群运行场景
如果后续需要将应用打包上传到Dataproc集群运行,集群本身已内置Spark Hive相关依赖,为了避免依赖冲突,可以新增Maven profile区分本地和线上环境:
<profiles> <!-- 本地调试默认启用的profile --> <profile> <id>local</id> <activation> <activeByDefault>true</activeByDefault> </activation> <dependencies> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.11</artifactId> <version>2.4.7</version> <exclusions> <exclusion> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-hive_2.11</artifactId> <version>2.4.7</version> </dependency> </dependencies> </profile> <!-- 提交到Dataproc集群时使用的profile --> <profile> <id>prod</id> <dependencies> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.11</artifactId> <version>2.4.7</version> <scope>provided</scope> <exclusions> <exclusion> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-hive_2.11</artifactId> <version>2.4.7</version> <scope>provided</scope> </dependency> </dependencies> </profile> </profiles>
本地调试默认使用local profile,线上打包时执行mvn package -Pprod即可。
额外注意事项
你使用的Spark 2.4.7版本对应Scala 2.11,要确保本地Eclipse运行环境的JDK版本为1.8,和pom.xml中配置的java.version保持一致,避免出现版本不兼容问题。
内容的提问来源于stack exchange,提问作者Rangan Roy
相关产品推荐
相关产品推荐

