实战phoenix
一 安装部署
1, 下载
http://archive.apache.org/dist/phoenix/
本文下载的是apache-phoenix-4.12.0-HBase-1.2-bin.tar.gz
2, 安装
解压之后将phoenix-4.12.0-HBase-1.2-server.jar复制到hbase/lib目录下。
在hbase-site.xml中,添加如下配置
<property>
<name>hbase.regionserver.wal.codec</name>
<value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
</property>
<property>
<name>hbase.coprocessor.master.classes</name>
<value>org.apache.phoenix.hbase.index.master.IndexMasterObserver</value>
</property>
<property>
<name>hbase.rpc.timeout</name>
<value>300000</value>
</property>
<property>
<name>hbase.region.server.rpc.scheduler.factory.class</name>
<value>org.apache.hadoop.hbase.ipc.PhoenixRpcSchedulerFactory</value>
<description>Factory to create the Phoenix RPC Scheduler that usesseparate queues for index and metadata updates</description>
</property>
<property>
<name>hbase.rpc.controllerfactory.class</name>
<value>org.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory</value>
<description>Factory to create the Phoenix RPCScheduler that uses separate queues for index and metadataupdates</description>
</property>
重启hbase
关于hadoop及hbase的安装部署,请参考:
3, 测试
测试的方法有很多,本文采用更加简单的测试方法。
在phoenix的bin目录下执行: sqlline.py [zookeeper]
./sqlline.py localhost:2181
创建表,并插入两条数据:
create table test (mykey integer not null primary key, mycolumn varchar);
upsert into test values (1,'Hello');
upsert into test values (2,'World!');
select * from test;
二 通过java的jdbc
创建表test1,并插入数据,然后查询
在这之前,要先将依赖:phoenix-4.12.0-HBase-1.2-client.jar加到工程的依赖里面
具体代码如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.Statement;
/**
* Created by spark on 2017/11/25.
*/
public class PhoenixTest {
public static void main(String[] args) throws SQLException {
Statement stmt = null;
ResultSet rset = null;
Connection con = DriverManager.getConnection("jdbc:phoenix:192.168.1.103:2181");
stmt = con.createStatement();
stmt.executeUpdate("create table test1 (mykey integer not null primary key, mycolumn varchar)");
stmt.executeUpdate("upsert into test1 values (1,'Hello')");
stmt.executeUpdate("upsert into test1 values (2,'World!')");
con.commit();
PreparedStatement statement = con.prepareStatement("select * from test1");
rset = statement.executeQuery();
while (rset.next()) {
System.out.println(rset.getString("mycolumn"));
}
statement.close();
con.close();
}
}
输出结果如下:
三 映射hbase表
针对预先存在的HBase表,可以通过CREATE TABLE / CREATE VIEW DDL语句创建一个Phoenix表或视图。在这两种情况下,我们都会保留HBase元数据。对于CREATE TABLE,我们将创建任何不存在的元数据(表格,列族)。我们还将为每行添加一个空的键值,以便查询按预期工作(不需要在扫描期间映射所有列)。
Rowkey是通过使用将值简单拼接形成的,其中在变长类型后使用一个零字节作为分隔符。
映射hbase表到phoenix:
比如,在hbase上创建表t1,然后映射到phoenix上,分两步:
1, 创建hbase表
create 't1', {NAME => 'f1', VERSIONS => 5}
2, 创建phoenix视图
CREATE VIEW "t1" ( pk VARCHAR PRIMARY KEY, "f1".val VARCHAR )
Pk列声明你的Rowkey是字符串类型。而“f1”.val列声明你的HBase表将包含KeyValues列簇和列限定符“f1”:VAL和他们的值将是一个VARCHAR。
请注意,如果使用全部大写名称创建HBase表,则不需要双引号(因为这是Phoenix对字符串进行规范化的方法,通过上面的方式对它们进行标准化)。例如,用:
创建'T1',{NAME =>'F1',VERSIONS => 5}
你可以创建这个phoenix图:
CREATE VIEW t1(pk VARCHAR PRIMARY KEY,f1.val VARCHAR)
Hbase表中插入一条数据,phoenix表中查询
put 't1','1001','f1:VAL','lisi'
同时创建hbase和phoenix表:
也可以直接使用cteate table同时创建phoenix表和hbase表
CREATE TABLE t1(pk VARCHAR PRIMARY KEY,val VARCHAR)
推荐阅读:
- [LeetCode]Array主题系列{1,11,15,16,18,26,27,31,33,34题}
- Bwapp漏洞平台答案全解-A1(第三篇)
- pom.xml配置文件中所有标签及作用简单描述
- 关于C#获取动态的时间差函数
- SQL Server 存储过程
- ubuntu中配置hadoop
- jQuery选择器大全(48个代码片段+21幅图演示)
- C# 如何在Excel 动态生成PivotTable
- RabbitMQ入门HelloWorld(C#)(翻译)
- Centos环境下搭建Asp.NET Core环境和安装Jexus
- Linux系统Java环境安装配置
- ASP.NET Core 依赖注入
- 使用Hive SQL插入动态分区的Parquet表OOM异常分析
- 基于STS和JWT的微服务身份认证
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 七日Python之路--第三天(之初试Django 2-1)
- 超性感的React Hooks(十一)useCallback、useMemo
- 七日Python之路--第二天
- 八、通过断点调试观察JS执行过程
- 传智播客OA项目学习--阶段三(Struts中Action书写)
- 九、函数与函数式编程
- 关于Hibernate懒加载----Spring filter
- 十、详解函数柯里化
- Unable to load file:*struts.xml-[unknown location]
- 使用hooks重新定义antd pro想象力(一)
- 传智播客OA项目学习--阶段三(级联操作)
- 七日Python之路--第十一天
- 使用hooks重构antd pro的想象力(三)我是如何利用hooks干掉redux的
- 七日Python之路--第十天
- 初学Vue.js,用 vue ui 创建项目会不会被鄙视