您的位置:首页 > 其它

HBase-8.phoenix介绍

2016-02-12 10:18 260 查看
1、phoenix是什么?
Apache Phoenix 是运行在Hbase之上的高性能关系型数据库,通过Phoenix可以像使用jdbc访问关系型数据库一样访问hbase。
Phoenix,操作的表以及数据存储在hbase上。phoenix只需要和hbase进行表关联。然后在用工具进行一些读写操作。
可以把Phoenix 只看成一种代替Hbase语法的工具。虽然Java可以用jdbc来连接phoenix,然后操作hbase,但是在生产环境中,不可以用OLTP中。
phoenix在查询hbase时,虽然做了一些优化,但是延迟还是不小。所以依然用在OLAT中,在将结果返回存储下来。

说明:
当今的数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果.

哪些公司在使用phoenix?



2、phoenix安装和使用
下面给出phoenix的按照和使用,官方网站地址请参考: http://phoenix.apache.org/Phoenix-in-15-minutes-or-less.html
安装
(1)下载对应的hbase版本的phoenix(phoenix-4.6.0-HBase-0.98-bin.tar.gz)
hbase和phoenix兼容性
Phoenix 2.x-HBase 0.94.x
Phoenix 3.x-HBase 0.94.x
Phoenix 4.x-HBase 0.98.1+

(2)解压后,复制the phoenix server jar 到 每个regionserver的lib目录下
tar -zxvf phoenix-4.6.0-HBase-0.98-bin.tar.gz

(3)重新启动region servers

(4)添加 the phoenix client jar 到 the classpath of your HBase client

(5)下载并安装SQuirrel作为SQL client,然后与HBase cluster进行SQL交互

启动
在phoenix的bin目录下,执行sqlline.py zk_ip:2181

操作
(1) 输出help查看 帮助并列出介个常见的命令
!help 打印命令的使用说明
!history 显示历史命令
!sql 执行SQL的命令Execute a SQL command
!tables 显示数据库中所有的表

(2)输入!tables 显示所有表
表的操作
(1)表创建和查询
首先,创建 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,8143197
CA,Los Angeles,3844829
IL,Chicago,2842518
TX,Houston,2016582
PA,Philadelphia,1463281
AZ,Phoenix,1461575
TX,San Antonio,1256509
CA,San Diego,1255540
TX,Dallas,1213825
CA,San Jose,912332


最后,创建us_population_queries.sql文件,主要用于查询数据的SQL语句

SELECT state as "State",count(city) as "City Count",sum(population) as "Population Sum"
FROM us_population
GROUP BY state
ORDER BY sum(population) DESC;


通过如下命令在终端执行

./psql.py  192.168.2.20:2181 us_population.sql us_population.csv us_population_queries.sql


执行结果:

St City Count Population Sum
-- ---------------------------------------- ----------------------------------------
NY 1 8143197
CA 3 6012701
TX 3 4486916
IL 1 2842518
PA 1 1463281
AZ 1 1461575

通过psql.py命令我们可以发现,然后把脚本存储到shell文件中,然后通过改命令执行。例如:单独执行一个命令

./psql.py 192.168.2.20:2181 us_population_queries.sql


(2) 插入数据
upsert into us_population(state,city,population) values('NY','DN',200);
3、phoenix的客户端
phoenix如何使用呢?我们可以把 phoenix看成mysql。phoenix可以在CLI下操作;也可以使用 phoenix的一个客户端工具 Squirrel访问。
Squirrel SQL Client,是一个连接数据库的客户端工具。一般支持JDBC的数据库都可以用它来连接。

(1)phoenix的客户端的安装
通过命令行执行java -jar squirrel-sql-3.7-standard.jar ,然后通过图形化界面进行安装

(2)安装完成后启动,启动界面



(3)需要点击“Drivers”,将phoenix的驱动添加进去。



按上面的顺序,依次填写。第一步Name:随便写 个名字,标记连接;第二步Example URL:相当于mysql的jdbc连接串,这里的alias写zookeeper的主机名称,端口号,可以写,可以不写,我一般不写;第三步选择 phoenix-4.6.0-HBase-0.98-client.jar的jar包;第四步就是手动输入org.apache.phoenix.jdbc.PhoenixDriver。

然后点击OK。

注意: 其中phoenix-4.6.0-HBase-0.98-client.jar驱动包可以在phoenix-4.6.0-HBase-0.98-bin.tar.gz的安装包中获取。

(4)添加别名



(5)连接成功后,双加别名可以查看结果



(6)通过SQL查看来操作SQL语句



4、用Phoenix Java api操作HBase
注意: 需要导入Phoenix的驱动程序对应的jar包(即: phoenix-4.6.0-HBase-0.98-client.jar)
(1)编写Java程序
try {
    Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");
    Connection conn = DriverManager.getConnection("jdbc:phoenix:192.168.2.20:2181");
    StringBuffer sb = new StringBuffer();

    sb.append("SELECT STATE,COUNT(CITY) AS CityCount,SUM(POPULATION) AS PopulatitionSum FROM US_POPULATION ");
    sb.append("GROUP BY STATE ");
    sb.append("ORDER BY SUM(POPULATION) DESC ");
    Statement pstm = conn.prepareStatement(sb.toString());
    ResultSet rs = pstm.executeQuery(sb.toString());
    while (rs.next()) {
        String state = rs.getString("STATE");
        int cityCount = rs.getInt("CityCount");
        int populatitionSum = rs.getInt("PopulatitionSum");
        System.out.println(state + "\t" + cityCount + "\t" + populatitionSum);
    }
} catch (Exception e) {
    System.err.println("Connection exception ..");
    e.printStackTrace();
}


(2)运行结果
NY 2 8143397
CA 3 6012701
TX 3 4486916
IL 1 2842518
PA 1 1463281
AZ 1 1461575
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: