数据的操作语言是SQL,因此很多工具的开发目标自然就是能够在Hadoop上使用SQL。这些工具有些只是在MapReduce之上做了简单的包装,有些则是在HDFS之上实现了完整的数据仓库,而有些则介于这两者之间。这样的工具有很多,来自于Shoutlet的软件开发工程师Matthew Rathbone最近发表了一篇文章,他列举了一些常用的工具并对各个工具的应用场景和未来进行了分析。
Apache Hive
Hive是原始的SQL-on-Hadoop解决方案。它是一个开源的Java项目,能够将SQL转换成一系列可以在标准的Hadoop TaskTrackers上运行的MapReduce任务。Hive通过一个metastore(本身就是一个数据库)存储表模式、分区和位置以期提供像MySQL一样的功能。它支持大部分MySQL语法,同时使用相似的 database/table/view约定组织数据集。Hive提供了以下功能:
- Hive-QL,一个类似于SQL的查询接口
- 一个命令行客户端
- 通过中央服务支持元数据共享
- JDBC 驱动
- 多语言 Apache Thrift 驱动
- 一个用于创建自定义函数和转换的Java API
何时使用它?
Hive是一个几乎所有的Hadoop机器都安装了的实用工具。Hive环境很容易建立,不需要很多基础设施。鉴于它的使用成本很低,我们几乎没有理由将其拒之门外。
但是需要注意的是,Hive的查询性能通常很低,这是因为它会把SQL转换为运行得较慢的MapReduce任务。
Hive的未来
Hortonworks 目前正在推进Apache Tez 的开发以便于将其作为新的Hive后端解决现在因为使用MapReduce而导致的响应时间慢的问题。
Cloudera Impala
Impala是一个针对Hadoop的开源的“交互式”SQL查询引擎。它由Cloudera构建,后者是目前市场上最大的Hadoop供应商之一。和Hive一样,Impala也提供了一种可以针对已有的Hadoop数据编写SQL查询的方法。与Hive不同的是它并没有使用MapReduce执行查询,而是使用了自己的执行守护进程集合,这些进程需要与Hadoop数据节点安装在一起。Impala提供了以下功能:
- ANSI-92 SQL语法支持
- HIVE-QL支持
- 一个命令行客户端
- ODBC 驱动
- 与Hive metastore互操作以实现跨平台的模式共享
- 一个用于创建函数和转换的C++ API
何时使用它?
Impala的设计目标是作为Apache Hive的一个补充,因此如果你需要比Hive更快的数据访问那么它可能是一个比较好的选择,特别是当你部署了一个Cloudera、MapR或者Amazon Hadoop集群的时候。但是,为了最大限度地发挥Impala的优势你需要将自己的数据存储为特定的文件格式(Parquet),这个转变可能会比较痛苦。另外,你还需要在集群上安装Impala守护进程,这意味着它会占用一部分TaskTrackers的资源。Impala目前并不支持YARN。
Impala的未来
Cloudera 已经开始尝试将Impala与YARN集成,这让我们在下一代Hadoop集群上做Impala开发的时候不再那么痛苦。
Presto
Presto是一个用Java语言开发的、开源的“交互式”SQL查询引擎。它由Facebook构建,即Hive最初的创建者。Presto采用的方法类似于Impala,即提供交互式体验的同时依然使用已有的存储在Hadoop上的数据集。它也需要安装在许多“节点”上,类似于Impala。Presto提供了以下功能:
- ANSI-SQL语法支持 (可能是ANSI-92)
- JDBC 驱动
- 一个用于从已有数据源中读取数据的“连接器”集合。连接器包括:HDFS、Hive和Cassandra
- 与Hive metastore交互以实现模式共享
何时使用它?
Presto的目标和Cloudera Impala一样。但是与Impala不同的是它并没有被一个主要的供应商支持,所以很不幸你在使用Presto的时候无法获得企业支持。但是有一些知名的、令人尊敬的技术公司已经在产品环境中使用它了,它大概是有社区的支持。与Impala相似的是,它的性能也依赖于特定的数据存储格式(RCFile)。老实地说,在部署Presto之前你需要仔细考虑自己是否有能力支持并调试Presto,如果你对它的这些方面满意并且相信Facebook并不会遗弃开源版本的Presto,那么使用它。
Shark
Shark是由UC Berkeley大学使用Scala语言开发的一个开源SQL查询引擎。与Impala和Presto相似的是,它的设计目标是作为Hive的一个补充,同时在它自己的工作节点集合上执行查询而不是使用MapReduce。与Impala和Presto不同的是Shark构建在已有的 Apache Spark数据处理引擎之上。Spark现在非常流行,它的社区也在发展壮大。可以将Spark看作是一个比MapReduce更快的可选方案。Shark提供了以下功能:
- 类似于SQL的查询语言支持,支持大部分Hive-QL
- 一个命令行客户端(基本上是Hive客户端)
- 与Hive metastore交互以实现模式共享
- 支持已有的Hive 扩展,例如UDFs和SerDes
何时使用它?
Shark非常有趣,因为它既想支持Hive功能又想极力地改善性能。现在有很多组织正在使用Spark,但是不确定有多少在用Shark。我并不认为它的性能能够赶上Presto和Impala,但是如果你已经打算使用Spark那么可以尝试使用一下Shark,特别是Spark正在被越来越多的主要供应商所支持。
Apache Drill
Apache Drill是一个针对Hadoop的、开源的“交互式”SQL查询引擎。Drill现在由MapR推动,尽管他们现在也支持Impala。Apache Drill的目标与Impala和Presto相似——对大数据集进行快速的交互式查询,同时它也需要安装工作节点(drillbits)。不同的是Drill旨在支持多种后端存储(HDFS、HBase、MongoDB),同时它的一个重点是复杂的嵌套数据集(例如JSON)。不幸的是drill现在仅在Alpha阶段,因此应用还不是很广泛。Drill提供了以下功能:
- ANSI SQL兼容
- 能够与一些后端存储和元数据存储交互(Hive、HBase、MongoDB)
- UDFs扩展框架、存储插件
何时使用它?
最好别用。该项目依然在Alpha阶段,因此不要在生产环境中使用它。
HAWQ
Hawq是EMC Pivotal 公司的一个非开源产品,作为该公司专有Hadoop版本“Pivotal HD”的一部分提供。Pivotal宣称Hawq是“世界上最快的Hadoop SQL引擎”,已经发展了10年。然而这种观点难以得到证实。很难知道Hawq到底提供了哪些特性,但是可以收集到下面这些:
- 完整的SQL语法支持
- 能够通过Pivotal Xtension框架(PXF)与Hive和HBase互操作
- 能够与Pivotal GemFire XD(内存实时数据库)互操作
何时使用它?
如果你使用由Pivotal公司提供的Hadoop版本那么就使用它,否则不使用。
BigSQL
Big Blue 有它自己的Hadoop版本,称为Big Insights。BigSQL作为该版本的一部分提供。BigSQL用于使用MapReduce和其他能够提供低延迟结果的方法(不详)查询存储在HDFS中的数据。从BigSQL的文档中可以了解到它大概提供以下功能:
- JDBC和ODBC 驱动
- 广泛的SQL支持
- 可能有一个命令行客户端
何时使用它?
如果你是IBM的客户那么就使用它,否则不使用。
Apache Phoenix
Apache Phoenix是一个用于Apache HBase的开源SQL引擎。它的目标是通过一个嵌入的JDBC驱动对存储在HBase中的数据提供低延迟查询。与之前介绍的其他引擎不同的是,Phoenix提供了HBase数据的读、写操作。它的功能有:
- 一个JDBC驱动
- 一个命令行客户端
- 批量加载数据的机制
- 能够创建新表,或者映射到已有的HBase数据
何时使用它?
如果你使用HBase那么就使用它。尽管Hive能够从HBase中读取数据,但是Phoenix还提供了写入功能。不清楚它是否适合产品环境和事务,但是作为一个分析工具它的功能无疑足够强大。
Apache Tajo
Apache Tajo项目的目的是在HDFS之上构建一个先进的数据仓库系统。Tajo将自己标榜为一个“大数据仓库”,但是它好像和之前介绍的那些低延迟查询引擎类似。虽然它支持外部表和Hive数据集(通过HCatalog),但是它的重点是数据管理,提供低延迟的数据访问,以及为更传统的ETL提供工具。它也需要在数据节点上部署Tajo特定的工作进程。Tajo的功能包括:
- ANSI SQL兼容
- JDBC 驱动
- 集成Hive metastore能够访问Hive数据集
- 一个命令行客户端
- 一个自定义函数API
何时使用它?
虽然Tajo的一些基准测试结果非常漂亮,但是基准测试可能会有一些偏见,不能对其完全信任 。Tajo社区现在也不够繁荣,在北美也没有主要的Hadoop供应商支持它。但是如果你在南韩,Gruter是主要的项目赞助者,如果你使用他们的平台那么可能会得到他们良好的支持,否则的话最好还是使用Impala或者Presto这些引擎。
感谢郭蕾对本文的审校。
相关推荐
- **Hive**:作为最早期的SQL-on-Hadoop系统之一,Hive通过底层的MapReduce或Tez框架处理类似SQL的查询语句。它提供了一种简单的方式来查询存储在Hadoop中的大量数据。Hive引入了ORC文件格式以优化数据存储和读取...
- SQL-on-Hadoop:指的是在Hadoop上运行的SQL查询引擎,能够对存储在Hadoop中的数据执行SQL查询。 - 数据采集(Data Collection)、索引存储(Indexed Storage):这些是构建日志分析平台时的关键环节。 - 大数据...
Spark是Apache软件基金会下的一个开源大数据处理框架,它以其高效的计算性能、易用性和灵活性而闻名。本压缩包“spark--bin-hadoop3-without-hive.tgz”提供了Spark二进制版本,针对Hadoop 3.1.3进行了编译和打包,...
这篇文章主要讲述了如何利用SQL-on-Hadoop技术实现一个分布式的数据仓库系统TRAF,解决传统数据仓库在扩展能力、支持非结构化数据和处理速度等方面的不足。以下是文章的主要知识点汇总: 1. 传统数据仓库的局限性 ...
Spark 2.3.0 是一个强大的分布式计算框架,其性能和灵活性相比早期版本有了显著提升。它支持多种数据处理模式,包括批处理、交互式查询(通过 Spark SQL)和实时流处理(通过 Spark Streaming)。这次的发布版本特别...
Spark是Apache软件基金会下的一个大数据处理框架,以其高效、易用和可扩展性著称。在给定的压缩包"spark-2.2.0-bin-hadoop2.6.tgz"中,包含了运行Spark在Hadoop YARN(Yet Another Resource Negotiator)模式下所需...
Spark是Apache软件基金会下的一个大数据处理框架,以其高效、易用和可扩展性著称。在给定的压缩包文件"spark-2.1.2-bin-hadoop2.6.tgz"中,我们找到了Spark的一个特定版本(2.1.2)与Hadoop 2.6版本的集成构建。这个...
"spark-2.0.0-bin-hadoop2-without-hive.tgz"是一个针对Hadoop 2.x优化的Spark二进制发行版,但值得注意的是,它不包含Hive的相关组件。 Spark的核心组件包括: 1. **Spark Core**:Spark的基础框架,负责任务调度...
Spark是Apache软件基金会下的一个开源大数据处理框架,以其高效、易用和可扩展性而闻名。Spark 2.4.0版本是其重要的一个发行版,它基于Hadoop 2.7版本构建,提供了丰富的数据处理功能。"spark-2.4.0-bin-hadoop2.7....
综上所述,SQL on Hadoop已经从最初的Hive发展为一个多元化的生态系统,包含了各种不同的框架和技术,以应对不同场景下的数据处理需求。未来SQL on Hadoop将不断发展,以适应大数据领域不断变化的需求和技术进步。
标题:“Impala A Modern, Open-Source SQL Engine for Hadoop”介绍了一个现代化的开源SQL引擎,专门针对Hadoop数据处理环境进行架构设计。接下来,我将围绕这个标题和文件中提供的信息展开详细的讲解。 知识点一...
标题中的“SQL标准2003”指的是SQL:2003,这是国际标准化组织(ISO)和美国国家标准协会(ANSI)发布的SQL语言的第五个版本。这一版本的SQL扩展了对数据库语言的功能,引入了许多新特性,如窗口函数、游标改进、递归...
Apache Flink是一个强大的开源流处理框架,由Apache软件基金会维护,其核心是一个用Java和Scala编写的分布式流数据流引擎。Flink设计目标是提供高吞吐、低延迟的实时流处理能力,同时兼顾批处理的效率。这一特性使得...
Spark 框架 SQL 部分解析过程 SparkSQL 是 Spark 技术体系中较有影响力的应用(Killer application),也是 SQL-on-Hadoop 解决方案中举足轻重的产品。本书由 11 章构成,从源码层面深入介绍 Spark SQL 内部实现...
下面将对几个流行的开源SQL on Hadoop工具进行比较和介绍。 1. Apache Hive Hive是大数据领域非常流行的数据仓库工具,它允许用户使用类SQL查询语言HQL来执行查询,这些查询最终会被转换成MapReduce作业在Hadoop...
- 实时查询服务,如使用Impala或Hawq等SQL-on-Hadoop工具。 综上所述,Tez在Hadoop-2.7.1中扮演着提升大数据处理效率的重要角色,通过其灵活的任务执行模型和与YARN的紧密集成,为开发人员提供了高效、低延迟的...
Spring与Hadoop集成是指在Spring框架中引入Hadoop的功能,利用Spring强大的依赖注入和面向切面编程能力来简化Hadoop应用程序的开发过程。通过这种集成方式,开发者可以更方便地管理Hadoop配置、创建和运行MapReduce...
Hadoop 3.0 是一个重要的分布式计算框架,它在Hadoop 2.x的基础上进行了大量改进和优化,为大数据处理提供了更高效、更稳定、更灵活的解决方案。在这个压缩包中,你将找到预编译的Hadoop 3.0.0版本,这将方便你在...