Phoenix:在Apache HBase上执行SQL查询

标签: phoenix apache hbase | 发表时间:2013-02-18 12:50 | 作者:ricohzhanglong
出处:http://blog.csdn.net

本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2013/02/Phoenix-HBase-SQL


近日,Salesforce.com开源了 Phoenix,这是一个Java中间层,可以让开发者在Apache HBase上执行SQL查询。InfoQ有幸采访到了Salesforce.com的主开发者James Taylor以了解关于Phoenix的更多信息。

除了无数的SQL、NoSQL与NewSQL数据库,Salesforce.com又 宣布Phoenix项目,这是构建在 Apache HBase(列式大数据存储)之上的一个SQL中间层。Phoenix完全使用Java编写,代码 位于GitHub上,并且提供了一个客户端可嵌入的JDBC驱动。

根据项目所述,Phoenix被Salesforce.com内部使用,对于简单的低延迟查询,其量级为毫秒;对于百万级别的行数来说,其量级为秒。Phoenix并不是像HBase那样用于map-reduce job的,而是通过标准化的语言来访问HBase数据的。

根据项目创建者所述, 对于10M到100M的行的简单查询来说,Phoenix要胜过Hive。对于使用了HBase API、协同处理器及自定义过滤器的Impala与OpenTSDB来说,进行相似的查询Phoenix的速度也会更快一些。

Phoenix查询引擎会将SQL查询转换为一个或多个HBase scan,并编排执行以生成标准的JDBC结果集。直接使用HBase API、协同处理器与自定义过滤器,对于简单查询来说,其性能量级是毫秒,对于百万级别的行数来说,其性能量级是秒。

Phoenix 最值得关注的一些特性有:

  • 嵌入式的JDBC驱动,实现了大部分的java.sql接口,包括元数据API
  • 可以通过多部行键或是键/值单元对列进行建模
  • 完善的查询支持,可以使用多个谓词以及优化的扫描键
  • DDL支持:通过CREATE TABLE、DROP TABLE及ALTER TABLE来添加/删除列
  • 版本化的模式仓库:当写入数据时,快照查询会使用恰当的模式
  • DML支持:用于逐行插入的UPSERT VALUES、用于相同或不同表之间大量数据传输的UPSERT SELECT、用于删除行的DELETE
  • 通过客户端的批处理实现的有限的事务支持
  • 单表——还没有连接,同时二级索引也在开发当中
  • 紧跟ANSI SQL标准

Phoenix代码基于 BSD许可开源。

下面是InfoQ采访Phoenix主开发者James Taylor的访谈内容。

InfoQ:为何要为Non-SQL数据存储提供SQL接口?现在已经有很多其他的SQL解决方案了。

JT:现有的SQL解决方案通常都不是水平可伸缩的,因此当数据量变大时会遇到阻碍。至于我们为何在NoSQL数据存储HBase上提供SQL接口,有如下几个原因:

  1. 使用诸如SQL这样易于理解的语言可以使人们能够更加轻松地使用HBase。相对于学习另一套私有API,人们可以使用熟悉的语言来读写数据。
  2. 使用诸如SQL这样更高层次的语言来编写减少了你所需编写的代码量。比如说,使用Phoenix,你可以编写下面这样的查询来获取Web的统计数据(我不想说使用原生的HBase API会有多少行代码,但肯定少不了):
    • SELECT
      • TRUNC(DATE,'DAY') DAY,
      • SUM(CORE) TOTAL_CPU_Usage,
      • MIN(CORE) MIN_CPU_Usage,
      • MAX(CORE) MAX_CPU_Usage
    • FROM WEB_STAT
    • WHERE DOMAIN LIKE 'Salesforce%'
    • GROUP BY TRUNC(DATE,'DAY');
  3. 执行查询时,在数据访问与运行时执行之间加上SQL这样一层抽象可以进行大量优化。比如说,对于GROUP BY查询来说,我们可以利用HBase中协同处理器这样的特性。借助于该特性,我们可以在HBase服务器上执行Phoenix代码。因此,聚合可以在服务端执行,而不必在客户端,这么做会极大减少客户端与服务端之间传输的数据量。此外,Phoenix还会在客户端并行执行GROUP BY,这是根据行键的范围来截断扫描而实现的。通过并行执行,结果会更快地返回。所有这些优化都无需用户参与,用户只需发出查询即可。
  4. 通过使用业界标准的API(如JDBC),我们可以利用现有的工具来使用这些API。比如说,你可以使用现成的SQL客户端(如SQuirrel, http://squirrel-sql.sourceforge.net/)连接HBase服务器并执行SQL。感兴趣的读者可以参见入门指南以了解更多信息: https://github.com/forcedotcom/phoenix/blob/master/README.md

InfoQ:有没有性能评估呢?响应时间是否变快了?可伸缩性是否更好了?

JT:可以在这里 https://github.com/forcedotcom/phoenix/wiki/Performance了解Phoenix与其他NoSQL产品/项目的性能对比。我们并没有发布Phoenix与现有的关系型技术之间的基准比较(网上已经有了HBase与他们之间的比较),但当行数与行宽增加时,NoSQL解决方案会更出众。这也取决于你是“如何”使用关系数据库的:是像Salesforce.com那样的多租模式抑或单租模式。HBase非常善于协同定位关系数据,这取决于行键是如何构成的,因此对于某些多租场景来说,其优势是很明显的。

InfoQ:何时才会增加连接支持呢?

JT:连接支持已经在我们的路线图上了,参见 https://github.com/forcedotcom/phoenix/wiki#wiki-roadmap。我们已经在做一些基础工作了,现在还不能给出准确的时间点,因为有太多事情要做,但我们会尽快的。

查看英文原文: Phoenix: Running SQL Queries on Apache HBase

作者:ricohzhanglong 发表于2013-2-18 12:50:32 原文链接
阅读:0 评论:0 查看评论

相关 [phoenix apache hbase] 推荐:

Phoenix:在Apache HBase上执行SQL查询

- - CSDN博客推荐文章
本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2013/02/Phoenix-HBase-SQL. 近日,Salesforce.com开源了 Phoenix,这是一个Java中间层,可以让开发者在Apache HBase上执行SQL查询.

使用Apache Phoenix 实现 SQL 操作HBase

- - ITeye博客
Apache Phoenix 相信大家并不陌生,它是HBase的SQL驱动,Phoenix 使得Hbase 支持通过JDBC的方式进行访问,并将你的SQL查询转换成Hbase的扫描和相应的动作. Hbase和Phoenix的安装这里就不做过多阐述,都很简单,这里给大家简单介绍一下安装完成后如何通过SQL Client来连接到Phoenix:.

Phoenix(sql on hbase)简介

- - CSDN博客云计算推荐文章
Phoenix(sql on hbase)简介. Phoenix takes your SQL query, compiles it into a series of HBase scans, and orchestrates the running of those scans to produce regular JDBC result sets.

快速理解 Phoenix : SQL on HBASE

- - CSDN博客推荐文章
作者:刘旭晖 Raymond 转载请注明出处. 更多云计算相关项目快速理解文档  http://blog.csdn.net/colorant/article/details/8255910. 不同于Hive on HBase的方式,Phoenix将Query Plan直接使用HBaseAPI实现,目的是规避MapReduce框架,减少查询的时间延迟.

Apache Phoenix的Join操作和优化 - CSDN博客

- -
估计Phoenix中支持Joins,对很多使用HBase的朋友来说,还是比较好的. 数据保存到Orders.csv,内容格式为:. 数据保存到Customers.csv,内容格式为:. 数据保存到Items.csv,内容格式为:. Orders.sql文件内容为:. Customers.sql文件内容为:.

[Binospace] 深入分析HBase-Phoenix执行机制与原理

- - SQL - 编程语言 - ITeye博客
针对HBase上SQL解决方案,目前社区内比较热门的有Cloudera的Impala,Horntworks的Drill,以及Hive. 根据与HBase的操作方式,可以分为三种:. 以MapReduce为核心,单个任务使用hbase-client原始接口访问;. 以Google Dremel为核心,单个任务使用hbase-client原始接口访问;.

Phoenix——向HBase发送标准SQL成为现实

- - CSDN博客云计算推荐文章
本文总结基于HBase的SQL查询系统——Salesforce phoenix. Phoenix是一个提供hbase的sql操作的框架,Phoenix是构建在HBase之上的一个SQL中间层. Phoenix完全使用Java编写,代码位于GitHub上,并且提供了一个客户端可嵌入的JDBC驱动. 对于简单的低延迟查询,其性能量级为毫秒;对于百万级别的行数来说,其性能量级为秒.

使用Phoenix通过sql语句更新操作hbase数据 - xirong

- - 博客园_首页
hbase 提供很方便的shell脚本,可以对数据表进行 CURD 操作,但是毕竟是有一定的学习成本的,基本上对于开发来讲,sql 语句都是看家本领,那么,有没有一种方法可以把 sql 语句转换成 hbase的原生API呢. 这样就可以通过普通平常的 sql 来对hbase 进行数据的管理,使用成本大大降低.

Apache Hadoop 1.0.0支持Kerberos验证,支持Apache HBase,提供针对HDFS的RESTful API

- - InfoQ中文站
海量数据框架Apache Hadoop怀胎六年终于瓜熟蒂落发布1.0.0版本. 本次发布的核心特性包括支持Kerberos身份验证,支持Apache HBase,以及针对HDFS的RESTful API. InfoQ就此次发布请Apache Hadoop项目的VP——Arun Murthy回答了几个问题.