目录
1. 概述
本文内容根据这篇文章学习总结而的。主要介绍二者各方面的对比,以及目前两款olap引擎在国内公司的使用情况。
kylin和clickhouse都是目前市场流行的大数据OLAP引擎。
2. 技术原理对比
2.1 kylin技术原理
kylin使用Java开发,与hadoop生态高度融合。kylin集群依赖zookeeper协调,只支持select查询语句。
- 存储和计算引擎
存储引擎:hbase(V4.0后可选)、parquet(结合spark)。
计算引擎:mapreduce、spark、flink。
- MOLAP:kylin是基于hadoop的MOLAP(Multi-dimensional OLAP)技术,核心技术是OLAP Cube。
- 支持海量(TB到PB)数据
基于hadoop生态,kylin中计算引擎有Mapreduce、spark、flink,预计算好的多维cube保存到hbase,hbase提供低延迟亚秒级查询响应。
- kylin4开始使用spark+parquet来替换hbase
这样,就进一步简化kylin自身的架构,不再依赖hbase等组件
- 查询性能提高百倍/千倍
由于大量聚合计算已离线计算好,执行查询sql时会直接从hbase或者parquet中读取结果,只需进行二次计算直接返回,比直接访问原始数据性能高百倍。
- 总结、使用场景
kylin运行时cpu使用率低,可以支持较高并发量,尤其适用于自助分析、固定报表等多用户、交互式分析的场景。
2.2 clickhouse技术原理
- ROLAP
基于map架构的分布式rolap(relational olap)分析引擎。
- 多节点、对等集群
clickhouse各节点职责对等,各自负责一部分数据的处理(shared nothing)。
- 向量化执行引擎
clickhouse具有向量化执行引擎,利用日志合并数、稀疏索引、cpu的simd(单指令多数据,single instruction multiple data)等特性,充分发挥硬件优势,实现高效计算。
- 特点总结
ch面对大数据量的计算场景时,通常达到cpu性能的极限,压榨cpu,ch的并发量不高,官网说是100。
3. 二者存储结构对比
3.1 kylin存储结构
目前kylin有两种可选的存储引擎hbase和parquet。
- hbase存储引擎
利用hbase的rowkey索引来加速查询,使用hbase region server做分布式并行计算。
- parquet存储引擎
在kylin V4.x版本,引入了parquet存储引擎(需配合spark同时使用)。
利用parquet的row group稀疏索引加速查询。利用spark executor做分布式并行计算。
3.2 hbase存储结构详细解释
使用hbase存储预聚合后的结果,rowkey主要有cuboid+dim的编码组成,其中cuboid可由8位二进制表示00000000,现例如共有2个维度<year,city>,一个度量price。
数据源表和维度编码后如下图所示:
在上图表2中,year维度中值1993被编码为 0, 1994被编码为 1。city维度中值beijing-->0,shanghai-->1。
因此,表3不同维度聚合后的度量值和维度,在hbase中的KV格式如第4张图。
rowkey=cuboid编码+维度编码
现在来分析一下表4中是如何在hbase中存储的。观察表4中的第8行,以<year,city>这两个维度举例,cuboid id = 00000011(因位维度<year,city>都有具体的值,而不是*号,故7、8位都是1),现在观察表4的第8行,次级cuboid的编码是11,因位他的值在表3中分别是1994-->1,上海-->1,因此rowkey最终是(即00000011 11)的组成。
提示:这里不清楚的,可以参考这篇文章。
上图4中hbase值给出了一个column,如果计算多个度量值,例如还有sum(profit)计算总收益,则在hbase中会有多个column,即hbase中 RowKey&Column
3.3 parquet存储结构详解介绍
在使用 Parquet 作为存储格式时则会直接存储维度值和聚合值,而不需要进行编码和 rowkey 拼接。在存成 Parquet 之前,计算引擎会根据维度对计算结果进行排序,维度字段越是靠前,那么在其上的过滤效率也就越高。另外在同一个分区下 shard 的数量和 parquet 文件的 row group 数量也同样会影响查询的效率。
6. 参考链接
- kylin专业术语和工作原理
https://www.jianshu.com/p/22f716d9c528