栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

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

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包被注释调的所造成的影响,博主会持续更新

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/650233.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号