Apache Phoenix是构建在HBase上的SQL中间层,允许使用标准的SQL语法来查询和管理存储在HBase中的数据。

前提条件

已创建选择了Phoenix和HBase服务的DataServing或Custom类型的集群,详情请参见创建集群

使用Phoenix客户端

  1. 使用SSH方式连接集群,详情请参见登录集群

  2. 执行以下命令,切换为hadoop用户。

    su - hadoop
  3. 执行以下命令,使用Phoenix的命令行工具。

    /opt/apps/PHOENIX/phoenix-current/bin/sqlline.py
  4. 您可以使用SQL进行数据查询。常见操作如下:

    • 创建表

      CREATE TABLE IF NOT EXISTS example(
          my_pk bigint not null,
          m.first_name varchar(50),
          m.last_name varchar(50) 
          CONSTRAINT pk PRIMARY KEY (my_pk)
      );
    • 插入数据

      UPSERT INTO example(my_pk,m.first_name,m.last_name) VALUES(100,'Jack','Ben');
      UPSERT INTO example(my_pk,m.first_name,m.last_name) VALUES(200,'Jack3','Ben3');
    • 查询数据

      SELECT * FROM example;

      返回信息如下所示。

      +--------+-------------+------------+
      | MY_PK  | FIRST_NAME  | LAST_NAME  |
      +--------+-------------+------------+
      | 100    | Jack        | Ben        |
      | 200    | Jack3       | Ben3       |
      +--------+-------------+------------+
    • 删除表

      DROP TABLE IF EXISTS example;

使用Phoenix JDBC

配置Maven依赖

<dependency>
     <groupId>org.apache.phoenix</groupId>
     <artifactId>phoenix-core</artifactId>
     <version>${phoenix.version}</version>
</dependency>

其中,${phoenix.version}须与集群中的Phoenix版本保持一致。

代码示例

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.Statement;

public class TestPhoenixJdbc {

    public static void main(String[] args) throws SQLException {
        Statement stmt = null;
        ResultSet rset = null;

        Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");
        Connection con = DriverManager.getConnection("jdbc:phoenix:[zookeeper quorum hosts]");
        stmt = con.createStatement();

        stmt.executeUpdate("create table test (mykey integer not null primary key, mycolumn varchar)");
        stmt.executeUpdate("upsert into test values (1,'Hello')");
        stmt.executeUpdate("upsert into test values (2,'World!')");
        con.commit();

        PreparedStatement statement = con.prepareStatement("select * from test");
        rset = statement.executeQuery();
        while (rset.next()) {
            System.out.println(rset.getString("mycolumn"));
        }
        statement.close();
        con.close();
    }
}

其中,JDBC URL语法为jdbc:phoenix:[comma-separated ZooKeeper Quorum Hosts[: ZK port [:hbase root znode [:kerberos_principal [:path to kerberos keytab] ] ] ]

相关文档

Phoenix更多信息可以参见官方文档: