引言
查询分析是大数据要解决的核心问题之一,而SQL作为查询分析中使用最简单、最广泛的的语言之一,必然而然的催生了许多支持在Hadoop上使用SQL的系统,这就是所谓的SQL-on-Hadoop系统,其中大众熟知的Hive就是最早的SQL-on-Hadoop系统。
经过若干年的发展,SQL-on-Hadoop系统已经百花齐放,按照架构划分这些系统大致可以分为以下几类:
- MapReduce架构系统:如Hive,这类系统是在MapReduce计算框架上封装了一个SQL语义层,在运行过程中把SQL转换为MapReduce程序来执行
- MPP架构系统:如Impala、Presto、Drill等,这类系统采用MPP(Massively Parallel Processing)架构,而非MapReduce
- 预计算系统:如Druid、Kylin等,这类系统主要特点是对数据进行预计算,并将结果保存,而在查询时直接获取相应结果值
本文主要是对这些系统做了一个基本总结,并简单介绍了一些主流系统的架构以及处理流程。下表是按照时间顺序,对这些系统的一个概述,包括技术特点和主导公司等。
项目名称 | 时间点 | 技术特点 | 主导公司 |
---|---|---|---|
Apache Hive | 2008年进入Apache,2010年毕业 | 一款基于HDFS的MapReduce计算框架,提供类SQL的数据查询功能,本质是将SQL转换为MapReduce任务运行 | 初期由Facebook开发,后被各大公司广泛接受 |
Apache Spark | 2010年进入Apache,2014年毕业 | 数据在内存中以RDD(Resilient Distributed Datasets)表示,DataFrame是其核心编程抽象,同时也支持交互式查询和流计算 | Databricks |
Cloudera Impala | 2012年进入Apache,2017年11月毕业 | 一款使用C/C++实现的MPP SQL查询引擎,使用HDFS作为存储,并支持列存 | Cloudera |
Apache Drill | 2012年进入Apache,2014年毕业 | 以Google Dremel论文为基础,一个MPP数据查询引擎,支持schema free的交互式数据查询 | MapR |
Presto | 2013年开源 | 基于内存的计算引擎,本身并不存储数据,支持跨数据源的级联查询 | |
Stinger Initiative | 2013年 | 对Hive的性能优化和提升 | Hortonworks |
Apache Phoenix | 2013年进入Apache,2014年5月毕业 | 构建在HBase上的一个SQL层 | 初期由Salesforce开发 |
Apache Tajo | 2013年进入Apache,2014年5月毕业 | 基于Hadoop的数据仓库和SQL数据查询执行引擎 | 由Database Lab., Korea University开发 |
Apache Flink | 2014年4月进入Apache,2014年12月毕业 | 流式的数据流执行引擎,基于流计算来模拟批计算,分别提供了流处理和批处理API |