spark 3.0 集成外部hive数仓报错: java.lang.NoSuchMethodError: org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy
目录
一、软件版本
| 组件 | 版本号 |
|---|---|
| hadoop | 3.1.3 |
| spark | 3.0.0 |
| scala | 2.12 |
| mysql | 8.0 |
| hive | 3.1.2 |
二、配置spark-shell查询外置hive数仓的步骤, 验证hive服务环境是否正常
- 拷hive-site.xml文件到spark_home/conf目录下

- 拷mysql驱动包放到spark_home/jars目录下

- 启动spark-shell终端环境, 查询hive:执行show tables命令,可得到正确结果,说明hive服务可被远程连接

三、配置spark代码程序查询外置hive数仓
-
将hive-site.xml放到工程的resources目录先
![]()
-
引入maven 依赖
<properties>
<scala.version>2.12</scala.version>
<spark.version>3.0.0</spark.version>
<mysql.version>8.0.16</mysql.version>
<hive.version>3.1.2</hive.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>${hive.version}</version>
</dependency>
</dependencies>
- 代码启用hive
import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession
object Demo07 {
def main(args: Array[String]): Unit = {
val conf: SparkConf = new SparkConf()
.setMaster("local[*]")
.setAppName("spark-使用外置hive数据源")
val sess: SparkSession = SparkSession.builder()
.enableHiveSupport() // 启用hive
.config(conf).getOrCreate()
sess.sql("show tables;").show()
sess.close()
}
}
- 程序查询验证

-
为什么找不到spark-hive_2.12:3.0.0(报红)
-
依赖下载失败: 不是
-
可以肯定的是: 版本不一致/不兼容. (pom文件的组件版本都和安装的版本一致且maven 仓库存在)
原因: spark所支持内置的hive的版本号与依赖版本号不兼容所致
spark默认便支持hive,也就是内置了hive,最初是1.2.1,
spark加载hive相关jar的3中方式:
builtin(默认):即使在代码中显示指定了配置项spark.sql.hive.metastore.version,也只能是1.2.1;否则抛出异常.
maven:其实就是pom.xml中的依赖
其它:配置项spark.sql.hive.metastore.version指明的是jar包目录路径,而非版本号
- 手动添加一行代码, 查看异常信息. 这里源码给出的建议是: 2.3.7而非1.2.1, 可能是spark为了兼容高版本的hive而升级了版本号.

- 处理:将hive-exec版本降级到指定版本即可,<hive.version>2.3.7</hive.version>



浙公网安备 33010602011771号