找回密码
 立即注册
  • QQ空间
  • 回复
  • 收藏

SQL ON HADOOP 技术框架汇总

流星雨| 2019-2-23 21:13 阅读 1326 评论 0

过去几年里,许多企业已慢慢将Hadoop作为其大数据分析堆栈的核心组件。尽管Hadoop生态系统的MapReduce组件提供了数据处理并行计算的能力,但随着时间的推移,MapReduce自身并不是连接存储在Hadoop生态系统中的数据的最简单途径,企业需要一种更简单的方式来连接要查询、分析、甚至要执行深度数据分析的数据,以便发掘存储在Hadoop中的所有数据的真正价值。SQL在帮助各类用户发掘数据的商业价值领域具有很长历史。

Hadoop上的SQL支持一开始是Apache Hive,一种类似于SQL的查询引擎,它将有限的SQL方言编译到MapReduce中。Hive对MapReduce的完全依赖会导致查询的很大延迟,其主要适用场景是批处理模式。另外,尽管Hive对于SQL的支持是好的开端,但对SQL的有限支持意味着精通SQL的用户忙于企业级使用案例时,将遇到严重的限制。它还暗示着庞大的基于标准SQL的工具生态系统无法利用Hive。值得庆幸的是,在为SQL on Hadoop提供更好的解决方案方面已取得长足进展。

1. Apache Hive

Hive是原始的SQL-on-Hadoop解决方案。它是一个开源的Java项目,能够将SQL转换成一系列可以在标准的Hadoop TaskTrackers上运行的MapReduce任务。Hive通过一个metastore(本身就是一个数据库)存储表模式、分区和位置以期提供像MySQL一样的功能。它支持大部分MySQL语法,同时使用相似的 database/table/view约定组织数据集。

2. Cloudera Impala

Impala的设计目标是作为Apache Hive的一个补充,因此如果你需要比Hive更快的数据访问那么它可能是一个比较好的选择,特别是当你部署了一个Cloudera、MapR或者Amazon Hadoop集群的时候。Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据。已有的Hive系统虽然也提供了SQL语义,但由于Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程,难以满足查询的交互性。相比之下,Impala的最大特点也是最大卖点就是它的快速。

3.Presto

Presto是一个用Java语言开发的、开源的“交互式”SQL查询引擎。它由 构建,即Hive最初的创建者。Presto采用的方法类似于Impala,即提供交互式体验的同时依然使用已有的存储在Hadoop上的数据集。

4.Spark SQL

Spark SQL,作为Apache Spark大数据框架的一部分,主要用于结构化数据处理和对Spark数据执行类SQL的查询。

SparkSQL的前身是Shark,给熟悉RDBMS但又不理解MapReduce的技术人员提供快速上手的工具,hive应运而生,它是当时唯一运行在Hadoop上的SQL-on-hadoop工具。但是MapReduce计算过程中大量的中间磁盘落地过程消耗了大量的I/O,降低的运行效率,为了提高SQL-on-Hadoop的效率,Shark应运而生,但又因为Shark对于Hive的太多依赖(如采用Hive的语法解析器、查询优化器等等),2014年spark团队停止对Shark的开发,将所有资源放SparkSQL项目上

5.Apache Drill

Apache Drill是一个针对Hadoop的、开源的“交互式”SQL查询引擎。Drill现在由MapR推动,尽管他们现在也支持Impala。Apache Drill的目标与Impala和Presto相似——对大数据集进行快速的交互式查询,同时它也需要安装工作节点(drillbits)。不同的是Drill旨在支持多种后端存储(HDFS、HBase、MongoDB),同时它的一个重点是复杂的嵌套数据集(例如JSON)。不幸的是drill现在仅在Alpha阶段,因此应用还不是很广泛。

6.HAWQ

Hawq是EMC Pivotal 公司的一个非开源产品,作为该公司专有Hadoop版本“Pivotal HD”的一部分提供。Pivotal宣称Hawq是“世界上最快的Hadoop SQL引擎”,已经发展了10年。Pivotal在2015年6月将项目捐献给了Apache,并于2015年9月进入了Apache 孵化器程序。

文章点评