首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >趣谈交互式查询的历史之 Impala

趣谈交互式查询的历史之 Impala

作者头像
哒呵呵
发布2020-03-25 16:19:21
9700
发布2020-03-25 16:19:21
举报
文章被收录于专栏:鸿的学习笔记鸿的学习笔记

接着上篇文章继续聊聊交互式查询,交互式查询崛起的原因是人类的懒惰本质,自从谷歌发表了 Dremel 论文后,相似的计算引擎不断地出现,在这篇文章里,针对几种典型的计算引擎简单聊聊。

第一波出现的 Dremel 的开源实现是 Cloudera 的 Apache Impala 和 MapR 的 Apache Drill 。

因为我们团队的交互式查询的底层引擎使用的是 Apache Impala ,对此也比较熟悉。Impala 与传统的大数据框架不同,它是由 C++ 写的,而不是常见的 JVM 上的语言。使用 C++ 的好处不言而喻,速度快、没有 GC ,更像是一款数据库,但是缺点也很明显,在我国,使用 C++ 的人还是少,玩 Java 的一大堆,这导致了 Impala 出了 bug 不容易解决。

Impala 的源码没有怎么读过,但是它的论文倒是拜读了一次。首先,Impala 是一个类似于 MPP 的架构,所谓 MPP 架构就是每个节点都是等价的,节点之间通过网络进行通信。不过与一般的 MPP 数据库不同的是,Impala 本身是没有存储系统的,而是通过接口的方式对接外部存储系统,例如 HDFS 、Kudu 和 Hbase。当然支持最好的是 HDFS 的 Parquet 文件格式和 Kudu 。

与常见的数据库设计不一样,一般的数据库都会选择单独的节点处理 SQL 解析等元数据,而 Impala 每个节点都是一样的,完全等价,既可以做 query compilation,也可以做coordinator,还可以做query execution 。这样的设计有一个好处就是,哪个节点宕机了都不需要担心会影响集群的可用性。不过使用了这个设计,就必然要引入一套类消息系统,同步各个节点的元数据信息。在 Impala 里这个类消息系统被称为 StateStore ,专门用于传输系统里面最新的元数据信息、统计信息等等。

Impala 还完全兼容 Hive 的元数据库,因此 Impala 还设计了一个 Catalog Daemon 去管理元数据,把 Hive 的元数据库转换成 Impala 能理解的元数据信息,除此以外,为了最大化利用,还会存储某张表的相关统计信息,比如存储的文件有哪些、表的数据类型有哪些甚至还有某些列的最大值等基础统计数据。

Impala 是一个典型的交互式查询引擎,可以理解为数据库和MapReduce 的一个中间产品。它既不像数据库那样,有着自己的存储系统,从而可以最大化的提升数据处理效率,也不像 MapReduce 简单粗暴,而是引进了很多数据库里的优化技术,相比于 MapReduce 大大加速了计算速度。

回到 Impala 本身,这种架构放到几十台机器上百台机器,应该是没啥问题的,但是要像 MapReduce 那样稳定运行在几千台机器上,还需要慎重考虑。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鸿的笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档