而Kylin自身就是一个MOLAP系统,多维立方体(MOLAP Cube)的设计使得用户能够在Kylin里为百亿以上数据集定义数据模型并构建立方体进行数据的预聚合。
Apache Kylin™是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc. 开发并贡献至开源社区。它能在亚秒内查询巨大的Hive表。
Kylin的优势有:
提供ANSI-SQL接口
交互式查询能力
MOLAP Cube 的概念
与BI工具可无缝整合
所以适合Kylin的场景包括:
用户数据存在于Hadoop HDFS中,利用Hive将HDFS文件数据以关系数据方式存取,数据量巨大,在500G以上
每天有数G甚至数十G的数据增量导入
有10个以内较为固定的分析维度
简单来说,Kylin中数据立方的思想就是以空间换时间,通过定义一系列的纬度,对每个纬度的组合进行预先计算并存储。有N个纬度,就会有2的N次种组合。所以最好控制好纬度的数量,因为存储量会随着纬度的增加爆炸式的增长,产生灾难性后果。
Impalahttps://impala.apache.org/
Impala也是一个SQL on Hadoop的查询工具,底层采用MPP技术,支持快速交互式SQL查询。与Hive共享元数据存储。Impalad是核心进程,负责接收查询请求并向多个数据节点分发任务。statestored进程负责监控所有Impalad进程,并向集群中的节点报告各个Impalad进程的状态。catalogd进程负责广播通知元数据的最新信息。
Impala的架构图如下:
Impala的特性包括:
支持Parquet、Avro、Text、RCFile、SequenceFile等多种文件格式
支持存储在HDFS、HBase、Amazon S3上的数据操作
支持多种压缩编码方式:Snappy、Gzip、Deflate、Bzip2、LZO
支持UDF和UDAF
自动以最有效的顺序进行表连接
允许定义查询的优先级排队策略
支持多用户并发查询
支持数据缓存
提供计算统计信息(COMPUTE STATS)
提供窗口函数(聚合 OVER PARTITION, RANK, LEAD, LAG, NTILE等等)以支持高级分析功能
支持使用磁盘进行连接和聚合,当操作使用的内存溢出时转为磁盘操作
允许在where子句中使用子查询
允许增量统计——只在新数据或改变的数据上执行统计计算
支持maps、structs、arrays上的复杂嵌套查询
可以使用impala插入或更新HBase
同样,Impala经常会和Hive、Presto放在一起做比较,Impala的劣势也同样明显:
Impala不提供任何对序列化和反序列化的支持。
Impala只能读取文本文件,而不能读取自定义二进制文件。
每当新的记录/文件被添加到HDFS中的数据目录时,该表需要被刷新。这个缺点会导致正在执行的查询sql遇到刷新会挂起,查询不动。
Druidhttps://druid.apache.org/
https://blog.csdn.net/warren288/article/details/80629909
Druid 是一种能对历史和实时数据提供亚秒级别的查询的数据存储。Druid 支持低延时的数据摄取,灵活的数据探索分析,高性能的数据聚合,简便的水平扩展。适用于数据量大,可扩展能力要求高的分析型查询系统。
Druid解决的问题包括:数据的快速摄入和数据的快速查询。
所以要理解Druid,需要将其理解为两个系统,即输入系统和查询系统。
Druid的架构如下:
Druid的特点包括:
Druid实时的数据消费,真正做到数据摄入实时、查询结果实时
Druid支持 PB 级数据、千亿级事件快速处理,支持每秒数千查询并发
Druid的核心是时间序列,把数据按照时间序列分批存储,十分适合用于对按时间进行统计分析的场景
Druid把数据列分为三类:时间戳、维度列、指标列
Druid不支持多表连接
Druid中的数据一般是使用其他计算框架(Spark等)预计算好的低层次统计数据
Druid不适合用于处理透视维度复杂多变的查询场景
Druid擅长的查询类型比较单一,一些常用的SQL(groupby 等)语句在druid里运行速度一般
Druid支持低延时的数据插入、更新,但是比hbase、传统数据库要慢很多