一、什么是即席查询

即席查询是用户根据自己的需求,灵活的选择查询条件,系统根据用户的选择生成相应的统计报表。普通查应用查询是定制开发的,即席查询是用户自定义查询条件

理解:快速的执行自定义SQL(可能无法提前运算和预测)

重点关注:数据存储格式和架构

二、Kylin

1、定义:Apache kylin是一个开源分布式分析引擎、提供Hadoop、Spark之上的SQL

查询接口及多维分析(OLAP)能力,可以再亚秒内查询巨大的Hive表

(还可以与BI工具集成ODBC、JDBC、RestAPI、还有自带的Zepplin插件,来访问Kylin服务)

2、架构

Kylin、druid、presto、impala四种即席查询对比-编程知识网Kylin架构

a、REST 服务层:应用程序开发的入口点

b、查询引擎层:Cube准备就绪后,与系统中的其他组件进行交互,从而向用户返回对应的结果

c、路由层:将解析的SQL生成的执行计划转换成Cube缓存的查询,cube通过预计算缓存在hbase中,这些操作可以在毫秒级完成,还有一些操作使用的原始查询,这部分延迟较高(麒麟高版本中已删除该层)

d、元数据管理工具:kylin的元数据管理存储在hbase中

e、任务引擎:处理所有离线任务:包括shell脚本、javaAPI以及MapReduce任务等等

三、impala

1、定义:Cloudera公司推出,提供对HDFS、Hbase数据的高性能、低延迟的交互式SQL查询功能。基于Hive,使用内存计算,兼顾数据仓库、具有实时、批处理、多并发等优点。

2、架构

Kylin、druid、presto、impala四种即席查询对比-编程知识网Impala架构

从上图可以看出,Impala自身包含三个模块:Impalad、Statestore和Catalog,除此之外它还依赖hive Metastore和HDFS

1) Impalad:
接收client的请求、Query执行并返回给中心协调节点。
子节点上的守护进程,负责向statestore保持通信,汇报工作。
2) Catalog:
分发表的元数据信息到各个impalad中;
接收来自statestore的所有请求。
3) Statestore:
负责收集分布在集群中各个impalad进程的资源信息、各节点健康状况,同步节点信息;
负责query的协调调度。

3、存储和架构

Kylin、druid、presto、impala四种即席查询对比-编程知识网

四、Druid

1、定义

Druid 是一个分布式的支持实时分析的数据存储系统,具有以下几个特点

亚秒级 OLAP 查询,包括多维过滤、Ad-hoc 的属性分组、快速聚合数据等等。
实时的数据消费,真正做到数据摄入实时、查询结果实时。
高效的多租户能力,最高可以做到几千用户同时在线查询。
扩展性强,支持 PB 级数据、千亿级事件快速处理,支持每秒数千查询并发。
极高的高可用保障,支持滚动升级。

实时数据分析是 Apache Druid 最典型的使用场景。该场景涵盖的面很广,例如:

实时指标监控
推荐模型
广告平台
搜索模型

这些场景的特点都是拥有大量的数据,且对数据查询的时延要求非常高。在实时指标监控中,系统问题需要在出现的一刻被检测到并被及时给出报警。在推荐模型中,用户行为数据需要实时采集,并及时反馈到推荐系统中。用户几次点击之后系统就能够识别其搜索意图,并在之后的搜索中推荐更合理的结果

五、Presto

1、定义

Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。注:虽然Presto可以解析SQL,但它不是一个标准的数据库。不是MySQL、Oracle的代替品,也不能用来处理在线事务(OLTP)

应用场景

Presto支持在线数据查询,包括Hive,关系数据库(MySQL、Oracle)以及专有数据存储。一条Presto查询可以将多个数据源的数据进行合并,可以跨越整个组织进行分析。

Presto主要用来处理响应时间小于1秒到几分钟的场景。

总结:

Kylin、druid、presto、impala四种即席查询对比-编程知识网

1.Druid:是一个实时处理时序数据的OLAP数据库,因为它的索引首先按照时间分片,查询的时候也是按照时间线去路由索引。

2.Kylin:核心是Cube,Cube是一种预计算技术,基本思路是预先对数据作多维索引,查询时只扫描索引而不访问原始数据从而提速。

3.Presto:它没有使用Mapreduce,大部分场景下比HIVE块一个数量级,其中的关键是所有的处理都在内存中完成。

4.Impala:基于内存计算,速度快,支持的数据源没有Presto多。

5.SparkSQL:是spark用来处理结构化的一个模块,它提供一个抽象的数据集DataFrame,并且是作为分布式SQL查询引擎的应用。它还可以实现Hive on Spark,hive里的数据用sparksql查询。

6.框架选型:(1)从超大数据的查询效率来看:

Druid>Kylin>Presto>SparkSQL

(2)从支持的数据源种类来讲:

Presto>SparkSQL>Kylin>Druid