1.5.SQuirrel使用


  • 前提:搭建hbase集群

https://mp.csdn.net/mp_blog/creation/editor/118357104

  • 版本: 

hbase2.3.5

https://mirrors.bfsu.edu.cn/apache/hbase/

Phoenix-hbase-2.3-5.1.2

https://mirrors.bfsu.edu.cn/apache/phoenix/phoenix-5.1.2/

Phoenix官网:http://phoenix.apache.org/  有兴趣的可以去了解下。

1.1. Phoenix简介

Phoenix 是 HBase 的开源 SQL 中间层,它允许你使用标准 JDBC 的方式来操作 HBase 上的数据。在 Phoenix 之前,如果你要访问 HBase,只能调用它的 Java API,但相比于使用一行 SQL 就能实现数据 查询,HBase 的 API 还是过于复杂。 Phoenix 的理念是 we put sql SQL back in NOSQL ,即你可 以 使用标准的 SQL 就能完成对 HBase 上数据的操作。同时这也意味着你可以通过集成 Spring Data JPA 或 Mybatis 等常用的持久层框架来操作 HBase。 其次 Phoenix 的性能表现也非常优异, Phoenix 查询 引擎会将 SQL 查询转换为一个或多个 HBase Scan,通过并行执行来生成标准的 JDBC 结果集。它通过 直接使用 HBase API 以及协处理器和自定义过 滤器,可以为小型数据查询提供毫秒级的性能,为千万 行数据的查询提供秒级的性能。同时 Phoenix 还 拥有二级索引等 HBase 不具备的特性,因为以上的优 点,所以 Phoenix 成为了 HBase 最优秀的 SQL 中间层。

 1.2. Phoenix安装

1.2.1. 下载并解压

不再累赘

命令不懂的可以查看https://editor.csdn.net/md/?articleId=118406481

1.2.2. 拷贝Jar包

按照官方文档的说明,需要将 phoenix server jar 添加到所有 Region Servers 的安装目录的 lib 目录 下。

这里由于我搭建的是 HBase 伪集群,所以只需要拷贝到当前机器的 HBase 的 lib 目录下。如果是真实 集群,则使用 scp 命令分发到所有 Region Servers 机器上。

cp ~/apps/Phoenix-hbase-2.3-5.1.2-bin/phoenix-5.1.2-HBase-2.3-server.jar  ~/apps/hbase-2.3.5/lib

1.2.3. 重启 Region Servers

# 停止Hbase stop-hbase.sh

# 启动Hbase start-hbase.sh

1.2.4. 启动Phoenix

在 Phoenix 解压目录下的 bin 目录下执行如下命令,需要指定 Zookeeper 的地址:

  • 如果 HBase 采用 Standalone 模式或者伪集群模式搭建,则默认采用内置的 Zookeeper 服务,端 口为 2181;
  • 如果是 HBase 是集群模式并采用外置的 Zookeeper 集群,则按照自己的实际情况进行指定。

./sqlline.py bigdata02:2181

1.2.5. 启动结果

启动后则进入了 Phoenix 交互式 SQL 命令行,可以使用 !table 或 !tables 查看当前所有表的信息

1.3. Phoenix 简单使用

1.3.1. 创建表
 

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)
);

新建的表会按照特定的规则转换为 HBase 上的表,关于表的信息,可以通过 Hbase Web UI 进行查 看:

1.3.2. 插入数据

Phoenix 中插入数据采用的是 UPSERT 而不是 INSERT ,因为 Phoenix 并没有更新操作,插入相同主键 的数据就视为更新,所以 UPSERT 就相当于 UPDATE + INSERT

UPSERT INTO us_population VALUES('NY','New York',8143197);
UPSERT INTO us_population VALUES('CA','Los Angeles',3844829);
UPSERT INTO us_population VALUES('IL','Chicago',2842518);
UPSERT INTO us_population VALUES('TX','Houston',2016582);
UPSERT INTO us_population VALUES('PA','Philadelphia',1463281);
UPSERT INTO us_population VALUES('AZ','Phoenix',1461575);
UPSERT INTO us_population VALUES('TX','San Antonio',1256509);
UPSERT INTO us_population VALUES('CA','San Diego',1255540);
UPSERT INTO us_population VALUES('TX','Dallas',1213825);
UPSERT INTO us_population VALUES('CA','San Jose',912332);

1.3.3. 修改数据

-- 插入主键相同的数据就视为更新

UPSERT INTO us_population VALUES('NY','New York',999999);

1.3.4. 删除数据

DELETE FROM us_population WHERE city='Dallas';

1.3.5. 查询数据

SELECT

              state as "州"

              ,count(city) as "市"

              ,sum(population) as "热度"

   FROM us_population

  GROUP BY state

   ORDER BY sum(population) DESC;

1.3.6. 退出命令

!quit

1.3.7. 扩展

从上面的操作中可以看出,Phoenix 支持大多数标准的 SQL 语法。

关于 Phoenix 支持的语法、数据类 型、函数、序列等详细信息,因为涉及内容很多,可以参考其官方文档,官方文档上有详细的说明:

语法 (Grammar) :https://phoenix.apache.org/language/index.html

函数 (Functions) :http://phoenix.apache.org/language/functions.html

数据类型 (Datatypes) :http://phoenix.apache.org/language/datatypes.html

序列 (Sequences) :http://phoenix.apache.org/sequences.html

联结查询 (Joins) :http://phoenix.apache.org/joins.html

1.4. Phoenix Java API

因为 Phoenix 遵循 JDBC 规范,并提供了对应的数据库驱动 PhoenixDriver ,这使得采用 Java 语言对 其进行操作的时候,就如同对其他关系型数据库一样,下面给出基本的使用示例。

1.4.1. 引入Phoenix core JAR包

如果是 maven 项目,直接在 maven 中央仓库找到对应的版本,导入依赖即可:

<!-- https://mvnrepository.com/artifact/org.apache.phoenix/phoenix-core -->
<dependency>
    <groupId>org.apache.phoenix</groupId>
    <artifactId>phoenix-core</artifactId>
    <version>5.1.2</version>
</dependency>

如果是普通项目,则可以从 Phoenix 解压目录下找到对应的 JAR 包,然后手动引入:

1.4.2. 简单的Java API实例

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class PhoenixJavaApi {
public static void main(String[] args) throws Exception {
// 加载数据库驱动
Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");
/*
* 指定数据库地址,格式为 jdbc:phoenix:Zookeeper 地址
* 如果 HBase 采用 Standalone 模式或者伪集群模式搭建,则 HBase 默认使用内置的
Zookeeper,默认端口为 2181
*/
Connection connection =
DriverManager.getConnection("jdbc:phoenix:192.168.200.226:2181");
PreparedStatement statement = connection.prepareStatement("SELECT * FROM
us_population");
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
System.out.println(resultSet.getString("city") + " " +
resultSet.getInt("population"));
}
statement.close();
connection.close();
}
}

文章的最后:

Phoenix有一个图形化的操作工具没有研究过大家感兴趣的可以学习一下

1.5 SQuirrel使用

  如果希望通过客户端以图形化的界面操作Phoenix的话,可以下载并安装SQuirrel。

   SQuirrel SQL Client是一个用Java写的数据库客户端,可以通过一个统一的用户界面来操作          MySQL 、PostgreSQL 、MSSQL、 Oracle等任何支持JDBC访问的数据库。使用起来非常方便。

    SQuirrel下载页面:http://squirrel-sql.sourceforge.net/#installation

    SQuirrel的安装步骤(参考https://phoenix.apache.org/installation.html):

    1)移除SQuirrel的lib文件夹下的phoenix-[oldversion]-client.jar(如果有的话),然后拷贝phoenix-[newversion]-client.jar到SQuirrel的lib文件夹下,phoenix-[newversion]-client.jar须与欲连接的hbase的lib下的phoenix版本一致。

    2)windows下,运行squirrel-sql.bat启动SQuirrel,在启动界面下,切换到Drivers选项卡,点击+号添加新的驱动。

    3)在添加驱动对话框中,设置name为Phoenix,设置Example URL为 jdbc:phoenix:localhost,其中的localhost为hbase使用的Zookeeper主机名。

    4)设置Class Name文本框的内容为 “org.apache.phoenix.jdbc.PhoenixDriver”, 如图4.1,然后点击“OK”关闭。

    5)切换到Aliases选项卡,点击+新建一个alias。

    6)在对话框中,name:任何名称,Driver:选择phoenix,username、password可省略,或者填任意值均可。

    7)URL的内容为:jdbc:phoenix: zookeeperquorum server,例如,要连接本机的hbase,URL为:jdbc:phoenix:localhost,如图4.2。

    8)点击Test,在新对话框中选择connect,如果一切设置正确的话,应该连接成功,然后点击OK关闭对话框。

    9)双击新建的phoenix alias,点击connect,然后就可以通过phoenix的sql语句操作hbase了,如图4.3。

图4.1 新建Driver

图4.2 新建Alias

图 4.3 建立连接

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐