设为首页 收藏本站
查看: 966|回复: 0

[经验分享] Phoenix:在Apache HBase上执行SQL查询

[复制链接]

尚未签到

发表于 2017-1-11 09:12:18 | 显示全部楼层 |阅读模式
  本文来源于我在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接口,有如下几个原因:

  • 使用诸如SQL这样易于理解的语言可以使人们能够更加轻松地使用HBase。相对于学习另一套私有API,人们可以使用熟悉的语言来读写数据。
  • 使用诸如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');   

  • 执行查询时,在数据访问与运行时执行之间加上SQL这样一层抽象可以进行大量优化。比如说,对于GROUP BY查询来说,我们可以利用HBase中协同处理器这样的特性。借助于该特性,我们可以在HBase服务器上执行Phoenix代码。因此,聚合可以在服务端执行,而不必在客户端,这么做会极大减少客户端与服务端之间传输的数据量。此外,Phoenix还会在客户端并行执行GROUP BY,这是根据行键的范围来截断扫描而实现的。通过并行执行,结果会更快地返回。所有这些优化都无需用户参与,用户只需发出查询即可。
  • 通过使用业界标准的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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-326794-1-1.html 上篇帖子: [Apache Click快速开发]为组件添加Ajax行为 下篇帖子: 在 Web 项目中应用 Apache Shiro 开源权限框架
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表