Kylin、druid、presto、impala大数据即席查询
一、OLAP一般分为即席查询和固化查询
即席查询:用户根据自己的需求,灵活的选择查询条件,系统根据用户的选择生成相应的统计报表。普通应用查询是定制开发的,即席查询是用户自定义查询条件,快速的执行自定义SQL(通过手写sql完成一些临时的数据分析需求,这类sql形式多变、逻辑复杂,对查询时间没有严格要求),无法提前运算和预测。
固化查询:指的是一些固化下来的取数、看数需求,通过数据产品的形式提供给用户,从而提高数据分析和运营的效率。这类的sql固定模式,对响应时间有较高要求。
二、Kylin、druid、presto、impala简介
Apache kylin是一个开源分布式分析引擎、提供Hadoop、Spark之上的SQL查询接口及多维分析(OLAP)能力,可以再亚秒内查询巨大的Hive表,(还可以与BI工具集成ODBC、JDBC、RestAPI、还有自带的Zepplin插件,来访问Kylin服务)。
kylin是一种OLAP数据引擎,支持大数据生态圈的数据分析业务,主要是通过预计算的方式将用户设定的多维度数据立方体(cube)缓存起来,达到快速查询的目的。应用场景应该是针对复杂sql join后的数据缓存。
核心是Cube,cube是一种预计算技术,基本思路是预先对数据作多维索引,查询时只扫描索引而不访问原始数据从而提速 。
Impala是Cloudera开发开源的,Impala是Cloudera开发并开源的,能查询存储在HDFS和HBase中的数据。同Hive一样,也是一种SQL on Hadoop解决方案。但Impala抛弃了MapReduce,使用更类似于传统的MPP数据库技术来提高查询速度。
- impala可以直接查询hdfs或hbase上的数据,可以与现有的存储无缝对接。
- impala需要单独安装。
- impala提供jdbc接口和sql执行引擎,可以与现有系统集成
Druid同kylin一样,是采用预计算的方式。主要解决的是对于大量的基于时序的数据进行聚合查询。数据可以实时摄入,进入到Druid后立即可查,同时数据是几乎是不可变。通常是基于时序的事实事件,事实发生后进入Druid,外部系统就可以对该事实进行查询。
Druid是一个实时处理时序数据的OLAP数据库,因为它的索引首先按照时间分片,查询的时候也是按照时间线去路由索引。 需要预计算,将数据存储在druid的Segment文件中,占用一部分存储资源,对sql支持不友好,需要用他自己的方言书写 。
做为一个分布式的支持实时分析的数据存储系统,具有以下几个特点
-
- 亚秒级 OLAP 查询,包括多维过滤、Ad-hoc 的属性分组、快速聚合数据等等。
- 实时的数据消费,真正做到数据摄入实时、查询结果实时。
- 高效的多租户能力,最高可以做到几千用户同时在线查询。
- 扩展性强,支持 PB 级数据、千亿级事件快速处理,支持每秒数千查询并发。
- 极高的高可用保障,支持滚动升级。
实时数据分析是 Apache Druid 最典型的使用场景。该场景涵盖的面很广,例如:实时指标监控、推荐模型、广告平台、搜索模型等场景。这些场景的特点都是拥有大量的数据,且对数据查询的时延要求非常高。在实时指标监控中,系统问题需要在出现的一刻被检测到并被及时给出报警。在推荐模型中,用户行为数据需要实时采集,并及时反馈到推荐系统中。用户几次点击之后系统就能够识别其搜索意图,并在之后的搜索中推荐更合理的结果。
Presto是Facebook开源的大数据查询引擎,为了解决hive查询慢产生。使用java编写,数据全部在内存中处理。
Facebook开源的一个java写的分布式数据查询框架,原生集成了Hive、Hbase和关系型数据库,Presto背后所使用的执行模式与Hive有根本的不同,它没有使用MapReduce,大部分场景下比hive快一个数量级,其中的关键是所有的处理都在内存中完成。
- 原生集成了Hive、Hbase和关系型数据库。
- 提供jdbc接口和sql执行引擎,可以与现有系统集成
- Presto支持在线数据查询,包括Hive,关系数据库(MySQL、Oracle)以及专有数据存储。一条Presto查询可以将多个数据源的数据进行合并,可以跨越整个组织进行分析
- Presto主要用来处理响应时间小于1秒到几分钟的场景。
- Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。注:虽然Presto可以解析SQL,但它不是一个标准的数据库。不是MySQL、Oracle的代替品,也不能用来处理在线事务(OLTP)。
三、总结
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