大数据平台的SQL查询引擎有哪些(上)?

图灵汇官网

前言

在Hadoop的分布式文件系统(HDFS)之上,构建了一系列具备独特技术特性的SQL查询引擎。这些引擎包括Hive、Impala、Presto、Spark SQL等。此外,分布式数据库HBase也具有Impala和Phoenix这样的SQL接口,可以通过SQL与HBase进行交互。还有其他一些分布式关系型数据库(NewSQL),如CockroachDB的SQL层和TiDB的TiDB模块,不仅作为查询引擎,还可以执行SQL插入、更新和删除操作。

尽管NoSQL在过去一段时间内备受关注,但从发展趋势来看,NoSQL似乎并不能完全取代SQL。关系模型依然具有不可替代的价值,特别是在大数据处理领域。本文将简要回顾关系模型的基本概念,以帮助读者更好地理解其重要性。

关系模型简介

关系模型之父Edgar F. Codd于1970年提出了《大型共享数据库数据的关系模型》,其中定义了三个核心要素:

  1. 结构:指预先定义好的表名和字段(名称、类型)。
  2. 完整性:表的主键不能为空,表与表之间的主/外键关联必须完整,外键必须能找到对应的主键。
  3. 操作:即SQL表达式,SQL的子查询是典型的闭包(Closure),可以形成嵌套表达式。

SQL查询引擎架构

Hive-ON-Hadoop

在SQL-ON-Hadoop架构中,Hive仍然是最成熟的SQL引擎之一,有时也被称作数据仓库工具。Hive已经从简单的SQL解释器发展成为一个独立的SQL引擎层,但仍依赖于Hadoop的HDFS存储层。然而,它不再受制于MapReduce计算引擎,而是可以采用其他计算引擎,如Tez和Spark。

为什么需要替换MapReduce?

MapReduce对数据读写方式过于僵硬,直接使用磁盘作为中间数据存储,导致分布式并行处理性能较差。不过,MapReduce在处理超大规模数据时仍有其优势,因为内存不足以容纳所有数据。相比之下,基于内存的计算引擎在处理中小数据量时更为高效。Tez相比MapReduce具有更高的性能,因为它在执行数据处理前有自动的优化策略,目前已成为Hive的默认执行引擎。Hive执行引擎也可以换成Spark,即Hive-on-Spark。

Impala

Impala是一个开源、低延迟的SQL查询引擎,运行在Hadoop之上。Impala的特点包括:

  1. 支持HDFS和HBase作为数据源。
  2. 复用Hive的SQL方言,使用Hive的元数据服务,因此Hive表定义可以在Hive和Impala中通用。
  3. 查询延迟比Hive+MapReduce低得多。
  4. 架构采用无共享模式,支持系统级容错性和强大的可扩展性。
  5. 基于内存的计算引擎,中间过程的数据会保存在内存中。
  6. 推荐Impala服务在HDFS的DataNode节点上运行,以减少网络传输。
  7. 采用C++语言实现,充分利用机器内存,避免了Java程序的垃圾回收机制延迟问题。
  8. 使用底层虚拟机(LLVM)编译查询,将查询方法编译成优化的机器码,提高CPU执行效率。

Impala架构

Impala的后台服务(Impalad)尽量在数据节点上运行(HDFS的DataNode、HBase)。Impalad包含查询规划器(Query Planner)、查询协调器(Query Coordinator)和查询执行引擎(Query Exec Engine)。

  1. 查询规划器解析来自JDBC、ODBC、impala-shell或Thrift等客户端请求的SQL语句,生成执行计划。
  2. 查询协调器将执行计划的不同部分分配到各个Impalad。
  3. 各个Impalad获取执行计划的一部分,并交由查询执行引擎访问本地HDFS DataNode或HBase数据,完成大规模并行处理(MPP),并将结果返回给客户端。

结论

SQL查询引擎在大数据处理中扮演着重要角色,而Hive和Impala则是其中的佼佼者。随着技术的进步,这些工具也在不断演进,以更好地满足用户的需求。未来,我们将继续探讨其他SQL查询引擎,如Presto、Spark SQL和Phoenix。

未完待续,敬请期待后续内容。

本文来源: 图灵汇 文章作者: 中国学习网