公司集群由cdh换成了cdp。
用spark代码测试 读取hive内的ods数据经过map等算子转化,然后存取到另外一个dw表里。代码都在cdh里ok的,已经发布生产。
备注cdh, spark版本为2.4.0-cdh6.3.2 hive版本为 2.1.1-cdh6.3.2
cdp spark版本为2.4.7.7.1.7.0-551 hive版本 3.1.3000.7.1.7.0-551
本着简单的方式只修改了pom文件,然后打包放到linux去跑数。
出现如下错误
org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
这还由啥说的复制 Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient去百度下。
发现千篇一律的metastore不能启动没有启动 通过 hive metastore xxxxx启动了就好了。
然而我自己通过beeline已经能连接到了,所以上述问题肯定不存在
那么我报一个别人都不会报的错?
首先看下这个报错是什么?不能实例化一个连接hiveMetaStore的session。
1.有可能metastore没开启,那么不能实例化。 排除了
2.我们代码的问题,实例化不行。
那么研究下2...继续看报错。
Caused by: java.lang.NoSuchMethodError: org.apache.hadoop.hive.shims.ShimLoader.getHadoopThriftAuthBridge()Lorg/apache/hadoop/hive/thrift/HadoopThriftAuthBridge;
看到了这句话? 说实话看不懂这个shim是啥啊。但是不妨碍我在idea里找到这个
说实话我也看不出,毕竟设计到源码了。
但是我突然想到个问题,报的错是NoSuchMethodError,这是什么意思呢?
突然间恍然大悟。仔细看下版本 hive-exec1.2.1
额外说句 这个jar包 我之前一篇文章说过 关于acid的表,设计到了这个jar,所以我就知道这个jar不对,服务器上有这个jar
然后我打包又打了一个,两个jar都有刚刚上述的shims类和方法,这不就报错了么?
在pom文件里 没有发现直接引用该jar。。。通过
找到是 spark-hive包下的,所以排除就好了
下面的metastore也要排除 否则会报同样的错,就是后面的类有点不一样原因同上
附上成功的代码
如果帮到你,点个赞是对我的鼓励,谢谢