GMTC全球大前端技术大会(北京站)门票9折特惠截至本周五,点击立减¥480 了解详情
写点什么

8 个值得关注的 SQL-on-Hadoop 框架

2014 年 6 月 27 日

数据的操作语言是 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 这些引擎。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014 年 6 月 27 日 23:2619611
用户头像

发布了 321 篇内容, 共 104.4 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

SpringCloud Alibaba开篇:SpringCloud这么火,为何还要学习SpringCloud Alibaba?

冰河

分布式 微服务 高性能 SpringCloud Alibaba

WebSocket-技术专题-服务器端消息推送

李浩宇/Alex

架构师训练营第 1 期第 6 周作业

业哥

甲方日常 38

句子

工作 随笔杂谈 日常

合约一键智能跟单软件,跟单平台开发

135深圳3055源中瑞8032

「深度解析」告诉你如何选择容器存储

焱融科技

Kubernetes 云原生 焱融科技 容器存储 分布式文件存储

云原生时代 容器持久化存储的最佳方式是什么?

京东科技开发者

数据库 云存储

我服了,难倒无数程序员的源码面试,就这样被轻轻松松讲透彻

小Q

Java 学习 源码 架构 面试

保证缓存与数据库的数据一致性不是很容易

架构师修行之路

缓存 一致性

缓存架构不够好,系统容易瘫痪

架构师修行之路

缓存 微服务 架构设计

你用过宏##粘贴函数,然后用函数指针查找执行吗?今天就给你说道说道

良知犹存

c c++

java安全编码指南之:文件IO操作

程序那些事

java安全编码 java安全 java安全编码指南 java代码规范

anyRTC与京东智联云市场达成战略合作,携手音视频平台

anyRTC开发者

ios 音视频 WebRTC RTC 安卓

架构师训练营第六周作业

Geek_4c1353

搜狗搜索或成为企鹅号流量入口:腾讯欲实现自己的流量闭环

石头IT视角

分布式关系数据库

韩向民

算法训练营毕业总结——以此自勉

Airship

算法 算法和数据结构

二十四、深入Python多进程multiprocessing模块

刘润森

Python

一笔订单,但是误付了两笔钱!这种重复付款异常到底该如何解决?

楼下小黑哥

支付宝 微信支付 支付系统 支付

来自朋友最近阿里、腾讯、美团等P7岗位面试题

艾小仙

Java 阿里巴巴 程序员 腾讯 面试

数字货币交易所开发,去中心化交易所平台搭建

WX13823153201

数字货币交易所开发

云开发·多次订阅一次性订阅消息后定时发送

Yukun

微信小程序 小程序云开发 消息推送 订阅消息

基于阿里云容器的CI/CD落地实践

LorraineLiu

阿里云 k8s Helm jenkins CI/CD

程序员跳槽,只要用好(2+2)方法论,绝对可以找到一家好公司

Java架构师迁哥

ARTS打卡 第21周

引花眠

微服务 ARTS 打卡计划 springboot

openEuler开源下一代全场景虚拟化平台StratoVirt

openEuler

开源 虚拟化 openEuler stratovirt

币币交易所开发,区块链交易系统源码

135深圳3055源中瑞8032

USDT支付入金系统开发搭建,跨境USDT支付系统开发

135深圳3055源中瑞8032

这里有一份Java程序员的珍藏书单,请您注意查收

捡田螺的小男孩

Java 后端 PDF

网易首席架构师2年心血只为趣谈网络协议,内容强不强你说了算

周老师

Java 编程 程序员 架构 面试

数字货币钱包开发,去中心化钱包源码搭建

135深圳3055源中瑞8032

8个值得关注的SQL-on-Hadoop框架-InfoQ