为了账号安全,请及时绑定邮箱和手机立即绑定

Impala与Hive混合使用的一个深坑

标签:
大数据

Hive版本  1.1.0-cdh5.9.0  Impala版本 2.7.0-cdh5.9.0

        Impala的高性能很好的弥补了Hive的查询响应慢的缺陷,在生产中若有实时查询的需求,我通常将这些表以Parquet格式将这些表的数据在Impala中另存一份,用于交互式分析。Impala能很好的兼容Hive的元数据,但反过来效果并不理想,今天就吃了大亏,记录下来与大家分享。

        事情是这样的,有一张画像表(portrait)存在HBase中,在HIVE中基于这个HBase画像表创建了一个外部表(portrait_hbase)以支持SQL查询。为了提高查询性能,我们将这张外部表转存成Parquet格式。这里我使用Impala的 CREATE TABLE LIKE语法,语句如下:


webp

以portrait_hbase表为模板创建parquet表

然后再将portrait_hbase中的数据拷贝到portrait_parquet中,得到一张parquet画像表以获得较好的查询性能。目前为止一切看起很美好。现在我们将这个过程封装成一个脚本,每天定时执行。为了降低内存消耗,我们将这个脚本用HIVE执行,大致过程如下:


webp

定时任务流程

第一次测试执行通过,检查结果也没有问题,再次执行的时候却提示HBase画像表找不到,在HDFS中检查了下,数据确实没有了。第一反应是不是谁误删,各种翻看日志,发现确实有一条这个画像表被删除的日志,时间和用户名跟我之前的操作是吻合的,看来这个锅甩不掉,只能自己背了。

webp

删表的日志

仔细分析一下,可能导致portrait表被删除的操作也只可能是删除portrait_parquet这步了,于是尝试着复现一下,在Impala下删除portrait_parquet并没有导致上面的问题,再在Hive中操作一次,问题复现了。原来在Impala中CREATE TABLE XX LIKE XXXX STORED AS PARQUET 跟直接 CREATE TABLE XXX STORED AS PARQUET 是不同的,前者会保留模板表的部分信息,并且如果模板表是一个外部表创建的新表的建表语句中是不会有 EXTERNAL 关键字的,如果在Hive中删除这个表将会导致原始数据被删除。



作者:Caoyun
链接:https://www.jianshu.com/p/8b9aa9ad81a9


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消