Phoenix的安装及JDBC访问

来源:互联网 发布:淘宝天猫优惠券好做吗 编辑:程序博客网 时间:2024/06/05 17:25

1.下载并安装

访问https://github.com/apache/phoenix/releases
各版本的命名格式为<phoenix版本>-HBase-<对应的HBase版本>
下载完成后使用tar -zxvf解压并进入到安装目录,执行bin/sqlline [参数为zookeeper集群地址,注意地址后不要写端口号]
如果输出:

Setting property: [isolation, TRANSACTION_READ_COMMITTED]issuing: !connect jdbc:phoenix:XXXXX(zookeeper集群地址) none none org.apache.phoenix.jdbc.PhoenixDriverConnecting to jdbc:XXXXX(zookeeper集群地址)17/10/17 16:20:06 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicableConnected to: Phoenix (version 4.6)Driver: PhoenixEmbeddedDriver (version 4.6)Autocommit status: trueTransaction isolation: TRANSACTION_READ_COMMITTEDBuilding list of tables and columns for tab-completion (set fastconnect to true to skip)...105/105 (100%) DoneDonesqlline version 1.1.8

然后执行!table命令出现系统自带的四个初始表,即代表安装成功。

2.SQL命令

举一个建表并插入数据的样例:

# 这里需要注意的是Phoenix的表名是大小写敏感的,而且会自动将表名和列名转为大写,如果希望使用小写的表名和列名需要使用双引号将名称括起来0: jdbc:phoenix:hb-bp1dn7ld2e77alr5g-004.hbas> create table if not exists "mytable"(ROW varchar primary key,"id" integer,"name" varchar);No rows affected (2.428 seconds)# 插入一条数据,由于HBase的特性,所以Phoenix中没有insert和update,需要使用upsert来插入或更新行0: jdbc:phoenix:hb-bp1dn7ld2e77alr5g-004.hbas> upsert into "mytable" (ROW,"id","name") values ('rowkey1',1,'lixiang');1 row affected (0.164 seconds)0: jdbc:phoenix:hb-bp1dn7ld2e77alr5g-004.hbas> select * from "mytable";

执行select后的结果
出现这个结果代表我们已经成功的建表并插入了一条数据

3.对HBase中已有的表进行映射

如果在HBase中直接建表,Phoenix是不会自动映射的,需要我们手动建立映射,方法很简单,在sqlline中建立一个新的表,表名和表结构与HBase中的原始表一样就可以了
比如我们在HBase中有一个原始表叫mytable,列族为family,family中有两列id和name

# 这里注意,建表时的列名要使用"列族名"."列名"和HBase中对应,且别忘了小写的名称用双引号括起来0: jdbc:phoenix:hb-bp1dn7ld2e77alr5g-004.hbas> create table if not exists "table" (ROW varchar primary key,"family"."id" integer,"family"."name" varchar);1 row affected (7.46 seconds)0: jdbc:phoenix:hb-bp1dn7ld2e77alr5g-004.hbas> select * from "table";

执行select后的结果
出现这个结果代表已经映射成功

4.JDBC访问

如果使用的是Maven来管理项目,在pom文件中集成Phoenix依赖

<dependency>    <groupId>org.apache.phoenix</groupId>    <artifactId>phoenix-core</artifactId>    <version>4.6.0-HBase-1.1</version></dependency>

我这里使用的是Phoenix对应HBase1.1版本的4.6.0版本
然后写一个测试方法:

@Testpublic void testPhoenixJDBC() throws SQLException, ClassNotFoundException {    try {            Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");        } catch (ClassNotFoundException e) {            e.printStackTrace();        }        Statement stat = null;        ResultSet rs = null;        // xxxx为zookeeper集群节点的地址        Connection conn = DriverManager.getConnection(                "jdbc:phoenix:xxxx.com,xxxx.com,xxxx.com:2181");        stat = conn.createStatement();        String sql = "select \"cf1\".\"mycolumn\" from \"mytable\"";        rs = stat.executeQuery(sql);        while (rs.next()) {            System.out.println("name:"+rs.getString("mycolumn"));        }        stat.close();        conn.close();    }}

运行后会看到有一行name:lixiang的输出,代表访问成功!

这是我的第一篇文章,分享技术的同时也加深了自己对相关技术的理解。如果文章中有疏漏或错误,欢迎大家指正!

原创粉丝点击