`
mmdev
  • 浏览: 12954236 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Phoenix:在Apache HBase上执行SQL查询

 
阅读更多

本文来源于我在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

分享到:
评论

相关推荐

    apache-phoenix-5.0.0-HBase-2.0-bin.tar.gz

    Apache Phoenix是构建在HBase之上的关系型数据库层,作为内嵌的客户端JDBC驱动用以对HBase中的数据进行低延迟访问。Apache Phoenix会将用户编写的sql查询编译为一系列的scan操作,最终产生通用的JDBC结果集返回给...

    apache-phoenix-4.14.2-HBase-1.3-bin.tar.gz

    Apache Phoenix是一个开源的SQL层,为HBase提供SQL访问方式。它允许用户通过JDBC连接HBase,并将SQL查询转换为HBase的扫描操作和其他相关动作。以下是安装和配置Phoenix的步骤: 准备工作: 确保已经安装了...

    hbase phoenix sql

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

    phoenix-5.0.0-HBase-2.0-client.jar

    hbase phoenix 客户端连接jdbc的jar包,SQuirreL SQL Client,DbVisualizer 等客户端连接hbase配置使用

    Flink Phoenix connector依赖包

    flink sql读写phoenix所使用到的连接器依赖包: flink-sql-connector-phoenix-1.14-1.0.jar 使用示例: create table tab2( ID STRING, NAME STRING, PRIMARY KEY (ID) NOT ENFORCED )WITH( 'connector' = '...

    Apache Phoenix:We put the SQL back in NoSQL

    Apache Phoenix:We put the SQL back in NoSQL

    apache-phoenix.zip

    实现sql查询Hbase,Phoenix 基于Hbase给面向业务的开发人员提供了以标准SQL的方式对Hbase进行查询操作,并支持标准SQL中大部分特性:条件运算,分组,分页,等高级查询语法。 这里提供两个版本: apache-phoenix-4.8.1...

    phoenix-5.0.0-HBase-2.0-client

    squirrel sql client 工具需要的最新jar包类型!!!!!!

    Apache Phoenix and HBase Past, Present and Future of SQL over HBase

    Apache Phoenix and HBase Past, Present and Future of SQL over HBase

    Sqoop通过Phoenix导hbase数据到hive

    at org.apache.sqoop.manager.SqlManager.importQuery(SqlManager.java:748) at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:515) at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:...

    Phoenix Hbase springjdbc整合 demo

    Phoenix Hbase springjdbc整合 demo Phoenix最早是saleforce的一个开源项目,后来...Phoenix是构建在HBase上的一个SQL层,能让我们用标准的JDBC APIs而不是HBase客户端APIs来创建表,插入数据和对HBase数据进行查询。

    HBase SQL Phoenix

    NULL 博文链接:https://57832638.iteye.com/blog/2013579

    藏经阁-Apache Phoenix and HBase_ Past, Present and Future of SQL ov

    藏经阁-Apache Phoenix and HBase_ Past, Present and Future of SQL ov

    apache-phoenix-4.14.0-cdh5.14.2-bin.part2.rar

    Phoenix是HBase的开源SQL引擎,可以用sql操作Hbase数据库。 包太大分成分为两个包,解压到同一个目录下即可 apache-phoenix-4.14.0-cdh5.14.2-bin.part1.rar apache-phoenix-4.14.0-cdh5.14.2-bin.part2.rar

    apache-phoenix-4.9.0-HBase-1.1-bin.tar.gz

    实现sql操作hbase

    Spark-SQL-on-HBase:通过Spark SQLDataframe接口对HBase数据的本地优化访问

    可通过Map / Reduce或接口机制(例如Apache Hive和Impala)或某些“本机” SQL技术(例如Apache Phoenix)进行对HBase数据SQL访问。 尽管前者的实现和使用成本通常较低,但它们的延迟和效率通常无法与后者相提并论...

    Apache Hadoop---Phoenix.docx

    Phoenix是构建在HBase上的一个SQL层,能让我们用标准的JDBC APIs而不是HBase客户端APIs来创建表,插入数据和对HBase数据进行查询。Phoenix本质其实是用Java写的基于JDBC API操作HBase的开源SQL引擎。

    phoenix

    Apache Phoenix通过提供一个利用Apache ... 它可以作为JDBC驱动程序进行访问,并可以通过标准SQL查询,更新和管理HBase表。https://mirrors.tuna.tsinghua.edu.cn/apache/phoenix/apache-phoenix-4.15.0-HBase-1.5/bin/

    apache-phoenix-4.14.0-cdh5.14.2-bin.part1.rar

    Phoenix是HBase的开源SQL引擎,可以用sql操作Hbase数据库。 包太大分成分为两个包,解压到同一个目录下即可 apache-phoenix-4.14.0-cdh5.14.2-bin.part1.rar apache-phoenix-4.14.0-cdh5.14.2-bin.part2.rar

    Pro Apache Phoenix(Apress,2016)

    Leverage Phoenix as an ANSI SQL engine built on top of the highly distributed and scalable NoSQL framework HBase. Learn the basics and best practices that are being adopted in Phoenix to enable a high...

Global site tag (gtag.js) - Google Analytics