1.6 分布式SQL查询引擎
如前所述,SQL是最常用来查询和分析数据的语言之一。它易学且有群众基础(了解SQL的人远比了解编程语言如Java的人多)。基本上,Hive就是因此而诞生。不过,Hive依赖于MapReduce,因为它把HiveQL查询转换成MapReduce的作业任务。
MapReduce是一个强大的框架。然而,它用于处理批量数据,它有大吞吐量和高延迟。对于数据转换或者ETL(提取、转换、加载)作业来说,它的表现非常棒,但在交互式查询或实时分析方面则不是一个完美的平台。Hive继承了MapReduce的限制。这促进了使用不同架构的低延迟查询引擎的诞生。
本节讨论了几个没有使用MapReduce的开源且低延迟的分布式SQL查询引擎。Spark SQL也可以作为分布式查询引擎,但此处暂不涉及,第7章会详细讨论。
1.6.1 Impala
Impala是一个开源的数据分析软件。它提供了SQL接口来分析存储在HDFS和HBase中的大数据集,支持HiveQL以及Hive支持的类SQL语言,可用于批处理和实时查询。
Impala没有使用MapReduce。相反,它使用了一种专业的分布式查询引擎来避免高延迟。它的架构和商用数据库MPP(大规模并行处理)类似。带来的好处就是:它提供了比Hive快一个数量级的响应时间。
1.6.2 Presto
Presto也是一个用于分析大数据集的开源分布式SQL查询引擎。目前,它提供的SQL接口可以分析HDFS、Cassandra和关系数据库中的数据。它支持太字节和拍字节级数据的交互式分析查询。另外,它还支持组合多数据源进行查询。
Presto在架构上与Impala类似,没有用MapReduce来分析HDFS数据,而是实现了MPP架构。
1.6.3 Apache Drill
Apache Drill是另一个用于分析存储在HDFS或NoSQL数据库中大数据集的开源分布式SQL查询引擎,其灵感来源于Google的Dremel。它可以用来对拍字节级数据执行快速的交互式即席查询。和Presto与Impala类似,它实现了一个集群式的MPP架构。它支持ANSI SQL和JDBC/ODBC接口,所以可以使用在任何支持JDBC/ODBC的BI或数据可视化应用中。
Apache Drill的主要特性包括:动态模式发现,灵活的数据模型,去中心化的元数据和可扩展性。使用Drill查询数据集时,模式规范并不是必需的。它使用自描述的格式(如Avro、JSON、Parquet和NoSQL)所提供的信息来决定数据集的模式。它也能处理查询中模式的更改。
Drill支持层级式的数据模型来查询复杂数据。它可以查询复杂的嵌套数据结构。比如,它可以用来查询存储在JSON或Parquet中的嵌套数据而不用“铺平”它们。
在Drill中,中心化的元数据也不是必需的。它通过数据源的存储插件获取元数据。因为不依赖中心化的元数据,所以Drill可以用来从多个数据源中立即查询数据,比如,Hive、HBase和文件。因此,它可以用作一个数据可视化平台。
Dirll兼容Hive。可以在Hive环境中使用Drill来实现对现有Hive表的快速、交互式的即席查询。它支持Hive的元数据、UDF(用户定义的函数)和文件格式。