HDP SparkSql远程操作Hive时的报错Unrecognized Hadoop major version number: 3.x.x处理,适用于spark2.x与hive3.x之间的交互

HDP版本3.1.4,Hadoop3.1.4,Spark2.3.2,Scala2.11.x,Hive3.1.0

这个版本本身基于集群操作是没问题的。但是远程操作时挖的坑太大

1.首先据说是spark2.3.2依赖包spark-hive_2.11下的hive-exec.1.2.1.spark2.jar这个包没有对hadoop3.0的支持。

报错信息如下

Exception in thread "main" java.lang.ExceptionInInitializerError
    at org.apache.hadoop.hive.conf.HiveConf.<clinit>(HiveConf.java:105)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at org.apache.spark.util.Utils$.classForName(Utils.scala:239)
    at org.apache.spark.sql.SparkSession$.hiveClassesArePresent(SparkSession.scala:1079)
    at org.apache.spark.sql.SparkSession$Builder.enableHiveSupport(SparkSession.scala:866)
    at scalaittest.sparksql.SparkOnHiveDemo$.main(SparkOnHiveDemo.scala:13)
    at scalaittest.sparksql.SparkOnHiveDemo.main(SparkOnHiveDemo.scala)
Caused by: java.lang.IllegalArgumentException: Unrecognized Hadoop major version number: 3.1.4
    at org.apache.hadoop.hive.shims.ShimLoader.getMajorVersion(ShimLoader.java:174)
    at org.apache.hadoop.hive.shims.ShimLoader.loadShims(ShimLoader.java:139)
    at org.apache.hadoop.hive.shims.ShimLoader.getHadoopShims(ShimLoader.java:100)
    at org.apache.hadoop.hive.conf.HiveConf$ConfVars.<clinit>(HiveConf.java:368)
    ... 8 more

报错处理依据这位大佬的方式进行调整

或者自行下载源码,重新编译进去对hadoop3.x的支持分支

window使用spark连接HDP-3.1.5.0时报Unrecognized Hadoop major version number: 3.1.1问题-CSDN博客

创建的properties文件中,添加当前spark的版本

至于为啥!我也不知道!这个地方我是无比懵比的。

而且我也按照大佬讲的设置了,也没有生效,换成我自己的spark版本号就可以用了,也没那么多时间深究,奇怪就先奇怪吧。有了解的可以评论里讲讲,我学习学习

2.有的小伙伴会遇到这个报错

spark hive java.lang.NoSuchFieldError: HIVE_STATS_JDBC_TIMEOUT

原因另外一个大佬有解释

https://www.cnblogs.com/fbiswt/p/11798514.html

3.然后最坑的来了

hive3.x后开始支持ACID,默认是开启的,但是Spark2.x不支持读取ACID表

需要关闭这三个参数,然后重建表

hive.strict.managed.tablesfalse
hive.create.as.insert.onlyfalse
metastore.create.as.acidfalse

参考这个大佬的说法

https://www.cnblogs.com/atrox/p/13579537.html

4.最后一步,还需要设置metastore访问参数

val session: SparkSession = SparkSession.builder()
      .appName("SparkOnHiveDemo")
      .master("local")
      .enableHiveSupport()
      .config("hive.metastore.uris", "thrift://192.168.100.102:9083")
      .getOrCreate()

然后就可以读了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值