15分钟了解Apache Phoenix(HBase的开源SQL引擎)

来源:互联网 发布:gcc for windows 编辑:程序博客网 时间:2024/06/11 11:34

翻译自官方文档(http://phoenix.apache.org/Phoenix-in-15-minutes-or-less.html),翻译的不好,望轻拍砖!

什么是Phoenix?

Phoenix是一个HBase的开源SQL引擎。你可以使用标准的JDBC API代替HBase客户端API来创建表,插入数据,查询你的HBase数据。

不要在我的程序和HBase之间增加额外的层,它只会拖慢速度的?

事实上,不会。Phoenix通过以下方式实现了比你自己手写的方式相同或者可能是更好的性能(更不用说可以少写了很多代码):
* 编译你的SQL查询为原生HBase的scan语句
* 检测scan语句最佳的开始和结束的key
* 精心编排你的scan语句让他们并行执行
* 让计算去接近数据通过
* 推送你的WHERE子句的谓词到服务端过滤器处理
* 执行聚合查询通过服务端钩子(称为协同处理器)

除此之外,我们还做了一些有趣的增强功能来更多地优化性能:
* 实现了二级索引来提升非主键字段查询的性能
* 统计相关数据来提高并行化水平,并帮助选择最佳优化方案
* 跳过扫描过滤器来优化IN,LIKE,OR查询
* 优化主键的盐值来均匀分布写压力

好吧,它很快。但是为什么要用SQL?这已经是70年代的东西了。

一种观点是:给大伙儿一些他们已经熟悉的东西吧。什么是更好的方式去激励他们使用HBase呢?最好的方式就是使用JDBC和SQL,原因有以下几点:
* 降低用户需要写的代码的数量
* 让性能优化对用户透明
* 方便利用和整合大量的已经存在的工具

但是怎样才能让SQL支持我最喜爱的HBase的某些技术

不要把这(使用Phoenix后)当作是你见HBase的最后一次好吧?SQL只是一种表达你想实现的功能的方式,你不必去思考怎样用SQL去实现功能(原文是SQL is just a way of expressing what you want to get not how you want to get it)。针对目前已经存在或者正在做的Phoenix功能,看看能否支持你喜欢的HBase的特殊用法。你有自己的想法?我们很乐意听到你的想法:把问题写下来给我们同时也可以加入我们的邮件列表。

说了这么多,我只是想知道如何开始?

非常棒!只要跟随我们的安装指南:
* 下载并解压我们的安装包
* 拷贝能够与你的Hbase安装兼容的phoenix的服务端jar包到每个集群节点的lib目录
* 重启你的集群节点
* 添加phoenix的客户端jar包到你的HBase客户端的classpath下
* 下载并设置SQuirrel作为你的SQL客户端,这样你就可以发起即时查询的SQL语句来操作你的HBase集群

我不想要下载安装其他东西了!

好吧,有道理 - 你可以创建你自己的SQL脚本并使用我们的命令行工具来执行他们(来代替前面说的下载安装软件的方案)。现在让我们来看一个例子。
定位到你安装Phoenix路径的bin目录来开始。

  • 首先,让我们来创建一个us_population.sql的文件,包含一个表的定义过程:
CREATE TABLE IF NOT EXISTS us_population (      state CHAR(2) NOT NULL,      city VARCHAR NOT NULL,      population BIGINT      CONSTRAINT my_pk PRIMARY KEY (state, city));
  • 现在让我们创建一个us_population.csv文件,包含一些要放到表里的数据:
NY,New York,8143197CA,Los Angeles,3844829IL,Chicago,2842518TX,Houston,2016582PA,Philadelphia,1463281AZ,Phoenix,1461575TX,San Antonio,1256509CA,San Diego,1255540TX,Dallas,1213825CA,San Jose,912332
  • 最后,让我们创建一个us_population_queries.sql文件,包含一个我们想在哪些数据上做的查询。
SELECT state as "State",count(city) as "City Count",sum(population) as "Population Sum"FROM us_populationGROUP BY stateORDER BY sum(population) DESC;
  • 在命令行终端上执行下面的命令
./psql.py <your_zookeeper_quorum> us_population.sql us_population.csv us_population_queries.sql

祝贺!你已经创建了你的第一个Phoenix表了,插入数据进去,并且执行了一个只有几行数据的聚合查询代码,在15分钟以内!

了不起 - 10行数据!还获得了什么?

好吧,真是难对付的人。查看一下我们的bin/performance.py脚本,针对你提出的数据库模式,去创建你想要的行数的数据,然后运行耗时的查询。

为什么要叫Phoenix(凤凰)呢?是不是之前有其他什么项目崩溃或者烧毁,然后这个是它的下一代版本?

很抱歉,但是我们没有时间和空间了,所以我们下次再来回答这个问题。

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 美图t8闪退怎么办 美图手机相机闪退怎么办 美图手机闪屏怎么办 魅族m6相册闪退怎么办 美图m6工厂模式怎么办 美图m6手机死机怎么办 美图m6s开不了机怎么办 美图手机m6进水怎么办 美图t8摔黑屏怎么办 美图屏幕点不动怎么办 朗动钥匙丢了怎么办 深圳小汽车摇号中签了怎么办 深圳摇号审核通过后怎么办 京东过保修期了怎么办 买的商业预付卡怎么办 壹钱包预付卡金额不足怎么办 美发店换老板原来预付卡怎么办 超市预付卡现超市停业怎么办? 利群购物卡丢了怎么办 利群金卡丢了怎么办 坐飞机洗漱用品超过规定怎么办 请律师团了解后怎么办 三星s9开不了机怎么办 三星手机开不了机了怎么办 安卓手机音响进水了怎么办 音响不读u盘怎么办 虎牌水壶显示f2怎么办 海尔冰箱门关不严没吸力怎么办 忘记京东金融账号怎么办 京东账号手机号已停用怎么办 京东账户忘了怎么办 京东登录名忘了怎么办? 京东已经发货了怎么办 苹果7p黑亮掉漆怎么办 淘宝卖家不肯退运费怎么办 健身付款收据丢了怎么办 收据丢了怎么办能退款 苹果售后不承认基带问题怎么办 电话卡欠费了不用了怎么办 软件移不到sd卡怎么办 手机显示sd卡受损怎么办