Apache Spark 2.2.0升级Hive Metastore后无法连接及spark-shell报错
Spark 2.2.0无法连接Hive Metastore 2.3.0的解决方案
从你提供的错误日志来看,核心问题是Spark 2.2.0的内置Hive客户端没有适配Hive 2.3.0版本——具体报错scala.MatchError: 2.3.0就是因为Spark 2.2.0的Hive版本匹配逻辑里压根没有2.3.0这个选项,导致实例化Hive会话构建器失败。
下面是几个可行的解决方案,你可以根据实际情况选择:
方案1:降级Hive Metastore到兼容版本
Spark 2.2.0官方明确支持的Hive Metastore版本范围是1.2.1 ~ 2.1.0,如果业务允许的话,把Hive Metastore降级到这个区间内的稳定版本(比如2.1.0),是最省心的解决方式,不需要修改Spark的任何配置或代码。
方案2:重新编译Spark以支持Hive 2.3.0
如果不能降级Hive,那就需要重新编译Spark源码,指定适配Hive 2.3.0:
- 下载Spark 2.2.0的源代码包并解压
- 进入源码目录,执行编译命令(根据你的Hadoop版本调整
-Phadoop-x.x参数,这里以Hadoop 2.7为例):./build/mvn -Pyarn -Phadoop-2.7 -Phive-2.3 -Dhive.version=2.3.0 -DskipTests clean package - 编译完成后,用生成的新Spark安装包替换原来的Spark环境即可。
方案3:临时启用Hive Metastore兼容模式(应急方案)
这个方案不能保证解决所有问题,但可以作为临时应急手段:
在Hive Metastore的配置文件hive-site.xml中添加以下配置,关闭客户端能力检查:
<property> <name>hive.metastore.client.capability.check</name> <value>false</value> </property>
添加后重启Hive Metastore服务,再尝试启动spark-shell。不过这个方案可能会导致部分Hive高级功能无法正常工作,只建议作为临时过渡使用。
内容的提问来源于stack exchange,提问作者chaithanyaa mallamla




