实战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的安装部署,请参考:

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)

推荐阅读:

1,HBase原理和设计

2,干货:Sqoop导入导出数据练习

3,kafka连接器两种部署模式详解

4,重磅:如何玩转kylin

原文发布于微信公众号 - Spark学习技巧(bigdatatip)

原文发表时间:2017-11-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏沃趣科技

事件记录 | performance_schema全方位介绍

在上一篇 《配置详解 | performance_schema全方位介绍》 中,我们详细介绍了performance_schema的配置表,坚持读完的是真爱,也...

52312
来自专栏数据库新发现

关于shared pool的深入探讨(五)

http://www.eygle.com/internal/shared_pool-5.htm

1222
来自专栏乐沙弥的世界

配置sqlnet.ora限制IP访问Oracle

--========================== -- 配置sqlnet.ora 限制IP访问Oracle --===================...

1024
来自专栏*坤的Blog

注入学习1:SQL注入语句大全

之前做了xss预防,以及些许的注入预防了,但是不够全面,如果还是搜集了下一些常用的注入手段,以此用来进行更好的预防.

4592
来自专栏乐沙弥的世界

SQL*Loader使用方法

SQL*Loader由一个输入控制文件来控制整个装载的相关描述信息,一个或多个数据文件作为原始数据,其详细组成结构包括

982
来自专栏.NET开发者社区

一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](八)

前言 Hi, 大家好,还是星期五,还是Rector,又在图享网准时和大家见面了。 今天给大家带来系列教程《一步一步创建ASP.NET MVC5程序[Reposi...

5006
来自专栏AILearning

Apache Zeppelin 中 Cassandra CQL 解释器

Name Class Description %cassandra CassandraInterpreter 为Apac...

2729
来自专栏岑玉海

Hive Tunning(二)优化存储

接着上一章我们讲的hive的连接策略,现在我们讲一下hive的数据存储。 下面是hive支持的数据存储格式,有我们常见的文本,JSON,XML,这里我们主要...

4094
来自专栏大数据学习笔记

Hadoop基础教程-第11章 Hive:SQL on Hadoop(11.5 HQL:DDL数据定义)(草稿)

第11章 Hive:SQL on Hadoop 11.5 HQL:DDL数据定义 HQL中数据定义部分,也就是DDL,主要包括数据库定义和数据表的定义。 前面创...

2509
来自专栏乐沙弥的世界

RMAN 提示符下执行SQL语句

       在手动恢复数据库时,有时候需要在SQL*Plus提示符以及操作系统提示符,RMAN提示符下来回切换显得有些繁琐。实际上RMAN为我们提供了命令行下...

1143

扫码关注云+社区

领取腾讯云代金券