您的足迹:首页 > Hbase >【原创】Phoenix安装与使用文档

【原创】Phoenix安装与使用文档

描述

现有hbase的查询工具有很多如:Hive,Tez,Impala,Shark/Spark,Phoenix等。今天主要记录Phoenix。

phoenix,中文译为“凤凰”,很美的名字。Phoenix是由saleforce.com开源的一个项目,后又捐给了Apache基金会。它相当于一个Java中间件,提供jdbc连接,操作hbase数据表。

但是在生产环境中,不可以用在OLTP中。在线事务处理的环境中,需要低延迟,而Phoenix在查询HBase时,虽然做了一些优化,但延迟还是不小。所以依然是用在OLAT中,再将结果返回存储下来。

Phoenix官网上,对Phoenix讲解已经很详细了。如果英语好,可以看官网,更正式一些。

Phoenix安装

1、下载Phoenix

下载地址:http://mirror.bit.edu.cn/apache/phoenix/

phoenix与HBase版本对应关系

Phoenix 2.x - HBase 0.94.x

Phoenix 3.x - HBase 0.94.x

Phoenix 4.x - HBase 0.98.1+

我目前测试使用版本概况:

Hadoop2.2.0--HBase0.98.2

所以我可以用phoenix4.x。下载的压缩包为phoenix-4.3.0-bin.tar.gz

clip_image002

2、上传压缩包

将phoenix-4.3.0-bin.tar.gz上传hbase集群的其中一个服务器的一个目录下

我上传的目录为/usr/lib

3、解压缩文件

tar –zxvf phoenix-4.3.0-bin.tar.gz

可看到有个phoenix-4.3.0-bin/目录,里面包含了Phoenix的所有文件。

4、配置Phoenix

4.1、将phoenix-4.3.0-bin/目录下phoenix-core-4.3.0.jar、phoenix-4.3.0-client.jar拷贝到各个 hbase的lib目录下。

4.2、重启hbase集群,使Phoenix的jar包生效。

4.3、将hbase的配置文件hbase-site.xml 放到phoenix-4.3.0-bin/bin/下,替换Phoenix原来的 配置文件。

5、修改权限

切换到下,修改psql.py和sqlline.py的权限为777

命令:chmod 777 文件名

6、验证是否成功

6.1、在phoenix-4.3.0-bin/bin/下输入命令: ./sqlline.py localhost

如果看到如下界面表示启动成功

clip_image004

6.2、输入!tables,查看都有哪些表。红框部分是用户建的表,其他为Phoenix系统表,系统表中维护了用户表的元数据信息。

clip_image006

6.3、退出Phoenix。输入!exit命令(PS:Phoenix早期版本如(2.11版本)需输入!quilt才可退出,目前高版本已改为!exit命令)

clip_image008

Phoenix使用

1、建表

./psql.py localhost:2181 ../examples/stock_symbol.sql,其中../examples/stock_symbol.sql是建表的sql语句

CREATE TABLE IF NOT EXISTS WEB_STAT (

HOST CHAR(2) NOT NULL,

DOMAIN VARCHAR NOT NULL,

FEATURE VARCHAR NOT NULL,

DATE DATE NOT NULL,

USAGE.CORE BIGINT,--usage指定列族名

USAGE.DB BIGINT,--usage指定列族名

STATS.ACTIVE_VISITOR INTEGER

CONSTRAINT PK PRIMARY KEY (HOST, DOMAIN, FEATURE, DATE)--指定主键

);

2、导入数据

命令:./psql.py -t WEB_STAT localhost:2181 ../examples/web_stat.csv

PS:其中 -t 后面是表名, ../examples/web_stat.csv 是csv数据(注意数据的分隔符需要是逗号)。

3、查询数据

首先使用sqlline查看(截图为部分列的数据),查询表名不区分大小写。

查询1、查询全部记录

语句:select * from web_stat;

clip_image010

查询2、查询记录总条数

语句:select count(1) from web_stat;

clip_image012

查询3、查询结果分组排序

语句:select domain,count(1) as num from web_stat group by domain order by num desc;

clip_image014

查询4、求平均值

语句:select avg(core) from web_stat;

clip_image016

查询5、多字段分组,排序,别名。

语句:select domain,count(1) as num,avg(core) as core,avg(db) as db from web_stat group by domain order by num desc;

clip_image018

查询6、查询日期类型字段

语句:select host,domain,date from web_stat where TO_CHAR(date)='2013-01-15 07:09:01.000';

clip_image020

查询7、字符串,日期类型转换

语句:select TO_DATE('20131125','yyyyMMdd') from web_stat;

Ps:输入的日期字符串会被转换为hbase表date的日期类型。

clip_image022

总结:Phoenix还支持了很多函数和sql语法,在这里不再一一列举。

更多请参考Phoenix支持部分

4、Phoenix基本shell命令

PS:以下,可能有部分命令在Phoenix更高版本中已失效,改为其他命令代替,请注意。

0: jdbc:phoenix:localhost> help

!all Execute the specified SQL against all the current connections

!autocommit Set autocommit mode on or off

!batch Start or execute a batch of statements

!brief Set verbose mode off

!call Execute a callable statement

!close Close the current connection to the database

!closeall Close all current open connections

!columns List all the columns for the specified table

!commit Commit the current transaction (if autocommit is off)

!connect Open a new connection to the database.

!dbinfo Give metadata information about the database

!describe Describe a table

!dropall Drop all tables in the current database

!exportedkeys List all the exported keys for the specified table

!go Select the current connection

!help Print a summary of command usage

!history Display the command history

!importedkeys List all the imported keys for the specified table

!indexes List all the indexes for the specified table

!isolation Set the transaction isolation for this connection

!list List the current connections

!manual Display the SQLLine manual

!metadata Obtain metadata information

!nativesql Show the native SQL for the specified statement

!outputformat Set the output format for displaying results

(table,vertical,csv,tsv,xmlattrs,xmlelements)

!primarykeys List all the primary keys for the specified table

!procedures List all the procedures

!properties Connect to the database specified in the properties file(s)

!quit Exits the program 此命令在Phoenix4.3版本已改为!exit

!reconnect Reconnect to the database

!record Record all output to the specified file

!rehash Fetch table and column names for command completion

!rollback Roll back the current transaction (if autocommit is off)

!run Run a script from the specified file

!save Save the current variabes and aliases

!scan Scan for installed JDBC drivers

!script Start saving a script to a file

!set Set a sqlline variable

5、用Phoenix Java api操作HBase

开发环境准备:eclipse3.5、jdk1.7、window8、hadoop2.2.0、hbase0.98.0.2、phoenix4.3.0

1、从集群拷贝以下文件:core-site.xml、hbase-site.xml、hdfs-site.xml文件放到工程src下

2、把phoenix的phoenix-4.3.0-client.jar和phoenix-core-4.3.0.jar添加到工程classpath

3、配置集群中各节点的hosts文件,把客户端的hostname:IP添加进去

4、在客户端host文件中加入集群的hostname和IP

5、工程截图

clip_image024

6、工程代码

package com.byzoro.phoenix.test;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

public class Phoenix_Test {

/**

* 使用phoenix提供的api操作hbase读取数据

* @author songyafei

* @param args

* @throws Throwable

* @date 2015-03-25

*/

public static void main(String[] args) throws Throwable {

try {

//下面的驱动为Phoenix老版本使用2.11使用,对应hbase0.94+

//Class.forName("com.salesforce.phoenix.jdbc.PhoenixDriver");

//phoenix4.3用下面的驱动对应hbase0.98+

Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");

} catch (Exception e) {

e.printStackTrace();

}

//这里配置zookeeper的地址,可单个,也可多个。可以是域名或者ip

String url = "jdbc:phoenix:10.14.9.41:2181";

//String url = "jdbc:phoenix:41.byzoro.com,42.byzoro.com,43.byzoro.com:2181";

Connection conn = DriverManager.getConnection(url);

Statement statement = conn.createStatement();

String sql = "select count(1) as num from web_stat";

long time = System.currentTimeMillis();

ResultSet rs = statement.executeQuery(sql);

while (rs.next()) {

int count = rs.getInt("num");

System.out.println("row count is " + count);

}

long timeUsed = System.currentTimeMillis() - time;

System.out.println("time " + timeUsed + "mm");

//关闭连接

rs.close();

statement.close();

conn.close();

}

}

7、运行截图:

clip_image026

实例二:

package com.byzoro.phoenix.test;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

public class Phoenix_Test {

/**

* 使用phoenix提供的api操作hbase中读取数据

* @author songyafei

* @param args

* @throws Throwable

* @date 2015-03-25

*/

public static void main(String[] args) throws Throwable {

try {

//下面的驱动为Phoenix老版本使用2.11使用,对应hbase0.94+

//Class.forName("com.salesforce.phoenix.jdbc.PhoenixDriver");

//phoenix4.3用下面的驱动对应hbase0.98+

Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");

} catch (Exception e) {

e.printStackTrace();

}

//这里配置zk的地址,可单个,也可多个。可以是域名或者ip

String url = "jdbc:phoenix:10.14.9.41:2181";

//String url = "jdbc:phoenix:41.byzoro.com,42.byzoro.com,43.byzoro.com:2181";

Connection conn = DriverManager.getConnection(url);

Statement statement = conn.createStatement();

//String sql = "select count(1) as num from web_stat";

String sql = "select * from web_stat where core = 35";

long time = System.currentTimeMillis();

ResultSet rs = statement.executeQuery(sql);

while (rs.next()) {

//获取core字段值

int core = rs.getInt("core");

//获取core字段值

String host = rs.getString("host");

//获取domain字段值

String domain = rs.getString("domain");

//获取feature字段值

String feature = rs.getString("feature");

//获取date字段值,数据库中字段为Date类型,这里代码会自动转化为string类型

String date = rs.getString("date");

//获取db字段值

String db = rs.getString("db");

System.out.println("host:"+host+"\tdomain:"+domain+"\tfeature:"+feature+"\tdate:"+date+"\tcore:" + core+"\tdb:"+db);

}

long timeUsed = System.currentTimeMillis() - time;

System.out.println("time " + timeUsed + "mm");

//关闭连接

rs.close();

statement.close();

conn.close();

}

}

Phoenix支持

Phoenix中的语法

Phoenix中的数据类型

Phoenix中的方法

本文档为原创,转载请注明出处,尊重作者劳动成果。

更多大数据技术知识请访问:宋亚飞.中国 www.songyafei.cn

本博客所有文章如无特别注明均为原创。作者:数据为王复制或转载请以超链接形式注明转自 数据为王
原文地址《【原创】Phoenix安装与使用文档

相关推荐


  • blogger

发表评论

路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交

网友评论(0)