交互式计算引擎常见的开源实现
摘自:《大数据技术体系详解:原理、架构与实践》
交互式处理(Interactive Processing)是操作人员和系统之间存在交互作用的信息处理方式。操作人员通过终端设备(如输入输出系统)输入信息和操作命令,系统接到后立即处理,并通过终端设备显示处理结果。在大数据领域中,交互式计算(处理)引擎是针对大数据具备交互式分析能力的分布式计算引擎,它通常用于OLAP(Online Analytical Processing,联机分析处理)场景。相比于批处理引擎(MapReduce或Hive),它对数据处理性能要求更高。
为了实现高性能数据处理,交互式计算引擎通常采用(Massively Parallel Processing)架构,并充分使用内存加速。为了方便数据分析人员表达自己的查询意图,交互式计算引擎通常支持SQL或JSON等查询语言。当前比较主流的交互式计算引擎包括ROLAP(Relational OLAP)类型的SQL查询引擎Impala和Presto,MOLADP(Multidimenisional OLAP)类型的OLAP查询引擎Druid和Kylin等。
Impala官网:http://impala.apache.org/.
Presto官网:https://prestodb.github.io/.
Druid官网:http://druid.io/.
Kylin官网:http://kylin.apache.org/.
一.交互式计算引擎产生背景
在开源大数据领域,交互式引擎并不是从一开始就出现的。起初,大数据领域数据处理引擎以MapReduce为主,但MapReduce引擎采用了批处理设计理念,数据处理性能低下:
IO密集型:
Map阶段中间结果写磁盘,Reduce阶段写HDFS,多个MapReduce作业之间通过共享存储系统(HDFS)交换数据。
任务调度和启动开销大:
大量任务需要分布式调度到各个节点上,且每个任务需启动一个Java虚拟机运行。
无法充分利用内存:
MapReduce是十多年前提出的分布式技术,当时内存价格昂贵,所以设计理念充分使用磁盘,而如今内存的价格越来越便宜,新行计算引擎可尝试通过内存加速。
Map端和Reduce段均需要排序:
这是MapReduce设计理念决定的,使得MapReuce无法很好地应对交互式处理场景。
为了克服MapReduce地性能缺陷,Google提出了新型交互式计算引擎Dremel,它构建于Googel地GFS(Google File System)等系统之上,支撑了Google地数据分析服务BigQuery等诸多服务。Dremel的技术亮点主要有两个:一个是采用了MPP架构,使用了多层查询树,使得任务可以在数千个节点上并行窒息感和聚合结果;二是实现了嵌套数据的列式存储 ,避免读取不必要的数据,大大减少网络和磁盘IO。
受Google Dremel的启发,Cloudera等公司开发了Impala,Facebook开发了Presto并将之开源。
二.交互式查询引擎分类
交互式计算引擎是具备交互式分析能力的分布式大数据计算引擎,它常用于OLAP场景。OLAP有很多实现方法,根据存储数据的方式不同可以分为ROLAP,MOLAP,HOLAP等。
(1)ROLAP
基于关系型数据库的OLAP实现(Relational OLAP)。它以关系型数据库为核心,以关系型结构进行多维度的表示和存储。它将多维结构划分为两类表:一类是事实表,用来存储数据和纬度关键字;另一类是纬度表,即对每个纬度至少使用一个表来存放纬度层次,成员类别等纬度描述信息。
ROLAP的最大好处是可以实时的从源数据中获取最新数据更新,以保持数据实施性,缺点在于运算效率比较低,用户等待响应时间比较长。
(2)MOLAD
基于多维度的OLAP实现(Multidimensional OLAP)。它以多位数据组织方式为核心,使用多纬数据存储数据。多维数组在存储系统中形成“数据立方体(Cube)”的结构,此结构是经过高度优化的,可以最大程度地提高查询能力。
MOLAP的优势在于借助数据多纬预处理显著提高运算效率,主要额缺陷在于占用存储空间和数据更新有一定延滞。
(3)HOLAP
基于混合组织的OLAP实现(Hybrid OLAP),用户可以根据自己的业务需求,选择哪些模型采用ROLAP,哪些采用MOLAP。一般来说,将不常用或需要灵活定位的分析使用ROLAP方式,而常用,常规模型采用MOLAP实现。
Impala和Presto可用于ROLAP场景,而Druid和Kylin常用于MOLAP场景。也有人将Druid规划到“HOLAP”范畴,因为它不会进行预计算,因此是一种“ROLAP”,但同时它此用了列式存储,且为非关系型模型,因此也是一种“MOLAP”。
三.常见的开源实现
在大数据生态圈中,主流的应用于ROLAP场景的交互式计算引擎包括Impala和Prosto,它们的特点如下:
(1)Hadoop native:
跟Hadoop生态系统有完好的结合,包括:
可直接在Hive Metastore对接,处理Hive中的表。
可直接处理存储在HDFS和HBase中的数据。
(2)计算与存储分析:
它们仅仅是查询引擎,不提供数据存储服务,所有要处理的数据都存储在第三方系统中,比如Hive,HDFS和HBase等。
(3)MPP架构
采用经典的MPP架构,具有较好的扩展性,能够对应TB甚至PB级别数据的交互式查询需求。
(4)嵌套式数据存储:
支持常见的列式存储格式,比如ORC(仅Presto支持)和Parquet(Impala和Presto均支持)。
主流的应用于MOLAP场景的交互式计算引擎包括Druid和Kylin,它们的特点如下:
(1)数据建模:
将数据分为纬度和度量两类,且所有查询必须针对以上两类列进行。
(2)数据预计算:
为了提高数据查询效率,MOLAP引擎一般会根据纬度和度量列,预先生成计算结果。
四.博主推荐阅读
链接一:交互式计算引擎ROLAP篇(https://www.cnblogs.com/yinzhengjie/p/10859658.html)
链接二:交互式计算引擎MOLAP篇(https://www.cnblogs.com/yinzhengjie/p/10865368.html)