Hudi0.10.0-Flink1.13.3-HIVE1.1.0关于hive查询异常总结

Hudi0.10.0-Flink1.13.3-HIVE1.1.0关于hive查询异常总结,第1张

Hudi0.10.0-Flink1.13.3-HIVE1.1.0关于hive查询异常总结

本文重点解决hudi在同步到hive1.x后,RT表无法查询的问题,阅读本文存在门槛,小白请先参考下面的文章进行部署

Flink CDC + Hudi + Hive + Presto构建实时数据湖最佳实践

部署完成之后需要使用hive,相信您已经将hudi-hadoop-mr-bundle-0.10.0-rc2.jar放到hive的auxlib下,并且已经给hive增加如下配置后重启hive

 然后我们登录shell,查看同步过来的hive表

如果你已经得到ro,rt结尾的表,那么可以进行后续步骤,首先测试ro表

正常

再测试rt表,失败,异常可能如下

 一般在hadoop换下遇到ClassNotFoundException,绝大多数就是单纯的缺少包,不用往其他方面思考,于是我们把这个类所在的parquet-hadoop包放到auxlib下

随后再进行尝试查询,再次报异常,我们再将parquet-cloumn,parquet-common放进去

 再次执行

 这时候您的异常,可能已经发生改变,不再是ClassNotFoundException,而是NoSuchMethodError,具体异常,这时候需要去找到这个包所在的类,然后在hadoop的总目录jars里面排除调这些包

大部分是parquet下的,这种排除法比较暴力,但是在hive无法升级的情况下,只能出此下策;这些包的影响有待考察

再parquet的异常排完之后,NoSuchMethodError还在继续,这时候可能会觉得这是一个无底洞,

随后又爆了,TProtocol这个类的getScheme方法找不到;关于NoSuchMethodError这个方法本质是程序优先去加载了hadoop classpath下或者hive/lib里边的包,而这些包里面缺少这个方法;很关键的一点是,那种体积比较大的包,往往隐藏猫腻!已知存在这个类的包如下:

很明显,如果您还想使用hive,hive-exec这个包是不能动的;因此,我们根据类加载的原则,在同一个目录下,加载顺序从上往下

这样,咱们先把正确的包改个名丢到顶层,然后这个包需要在hive的lib里面创建软连接,如图

 重新执行

问题解决,博主只是在执行hql的机器解决的,如需在hue使用请调整hive部署节点机器 

——————————————————————————————

PS:关于parquet包被注释调的所造成的影响,博主会持续更新

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5652379.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存