Phoenix映射Hbase 以及phoenix 的常用操作

1.Phoenix 简介

  1. 官网
  2. 在这里插入代码片
  官网: http://phoenix.apache.org/Phoenix-in-15-minutes-or-less.html
  源码: https://github.com/phoenixframework/phoenix

2. 特点:

优点:

    
1. 编译SQL查询为原生HBase的scan语句
2. 检测scan语句最佳的开始和结束的key(确定扫描 Rowkey 的最佳开始和结束位置)
3. 精心编排你的scan语句让他们并行执行
4. 让计算去接近数据
5. 推送你的WHERE子句的谓词到服务端过滤器处理
6. 执行聚合查询通过服务端钩子(称为协同处理器)
7. 完美支持 HBase 二级索引创建
8. DML命令以及通过DDL命令创建和操作表和版本化增量更改。
9. 容易集成:如Spark,Hive,Pig,Flume和Map Reduce
    缺点: 

缺点:

1.不支持事务处理
2.不支持复杂的条件

3.架构

在这里插入图片描述

4.安装省略, 因为ambari 中已经自动部署了Phoenix

在这里插入图片描述

5. 启动命令:

/usr/hdp/current/phoenix-client/bin/sqlline.py master01.pxx.com:2181/hbase-unsecure

6.Phoenix 的常用命令

- 可以使用` !table `查看表信息
- 使用 !describe tablename 可以查看表字段信息
- 使用 !history可以查看执行的历史SQL
- 使用 !dbinfo 可以查看Phoenix所有的属性配置
- 使用 !help 可以查看Phoenix所有的属性配置
- 使用!indexes tablename 列出指定表名的所有索引

比如:

0: jdbc:phoenix:master01.pxx.com:2181/hbase-u> !table
+------------+---------------+------------------+---------------+----------+------------+----------------------------+-----------------+--------------+-----------------+---------------+---------------+---+
| TABLE_CAT  |  TABLE_SCHEM  |    TABLE_NAME    |  TABLE_TYPE   | REMARKS  | TYPE_NAME  | SELF_REFERENCING_COL_NAME  | REF_GENERATION  | INDEX_STATE  | IMMUTABLE_ROWS  | SALT_BUCKETS  | MULTI_TENANT  | V |
+------------+---------------+------------------+---------------+----------+------------+----------------------------+-----------------+--------------+-----------------+---------------+---------------+---+
|            | SYSTEM        | CATALOG          | SYSTEM TABLE  |          |            |                            |                 |              | false           | null          | false         |   |
|            | SYSTEM        | FUNCTION         | SYSTEM TABLE  |          |            |                            |                 |              | false           | null          | false         |   |
|            | SYSTEM        | LOG              | SYSTEM TABLE  |          |            |                            |                 |              | true            | 32            | false         |   |
|            | SYSTEM        | SEQUENCE         | SYSTEM TABLE  |          |            |                            |                 |              | false           | null          | false         |   |
|            | SYSTEM        | STATS            | SYSTEM TABLE  |          |            |                            |                 |              | false           | null          | false         |   |
|            |               | US_POPULATION    | TABLE         |          |            |                            |                 |              | false           | null          | false         |   |
|            | TEST_PHOENIX  | STUDENTS         | TABLE         |          |            |                            |                               |              | false           | null          | false         |   |
|            | wudl          | wutable          | TABLE         |          |            |                            |                 |              | false           | null          | false         |   |
+------------+---------------+------------------+---------------+----------+------------+----------------------------+-----------------+--------------+-----------------+---------------+---------------+---+
0: jdbc:phoenix:master01.pxx.com:2181/hbase-u> 

创建表语句

0: jdbc:phoenix:master01.pxx.com:2181/hbase-u> CREATE TABLE IF NOT EXISTS wudl_table (
. . . . . . . . . . . . . . . . . . . . . . .>       id bigint  primary key,
. . . . . . . . . . . . . . . . . . . . . . .>       name VARCHAR ,
. . . . . . . . . . . . . . . . . . . . . . .>       address varchar 
. . . . . . . . . . . . . . . . . . . . . . .>       );
No rows affected (1.38 seconds)

插入数据命令:

upsert into wudl_table values(0001,'flink','深圳');
upsert into wudl_table values(0002,'spark','上海');

查询数据命令:

0: jdbc:phoenix:master01.pxx.com:2181/hbase-u> select * from wudl_table;
+-----+--------+----------+
| ID  |  NAME  | ADDRESS  |
+-----+--------+----------+
| 1   | flink  | 深圳       |
| 2   | spark  | 上海       |
+-----+--------+----------+
2 rows selected (0.035 seconds)

删除表命令:

0: jdbc:phoenix:master01.pxx.com:2181/hbase-u> DELETE FROM wudl_table WHERE address = '上海';
1 row affected (0.026 seconds)
0: jdbc:phoenix:master01.pxx.com:2181/hbase-u> select * from wudl_table;
+-----+--------+----------+
| ID  |  NAME  | ADDRESS  |
+-----+--------+----------+
| 1   | flink  | 深圳       |
+-----+--------+----------+
1 row selected (0.027 seconds)




删除表
DELETE FROM  wudl_table;

更新表数据

0: jdbc:phoenix:master01.pxx.com:2181/hbase-u> UPSERT INTO wudl_table (id,name,address) VALUES(0001,'flink','深圳上海');
1 row affected (0.023 seconds)
0: jdbc:phoenix:master01.pxx.com:2181/hbase-u> select * from wudl_table;
+-----+--------+----------+
| ID  |  NAME  | ADDRESS  |
+-----+--------+----------+
| 1   | flink  | 深圳上海     |
+-----+--------+----------+
1 row selected (0.045 seconds)
0: jdbc:phoenix:master01.pxx.com:2181/hbase-u> 

查看表的描述:

0: jdbc:phoenix:master01.pxx.com:2181/hbase-u> !describe wudl_table;
+------------+--------------+-------------+--------------+------------+------------+--------------+----------------+-----------------+-----------------+-----------+----------+-------------+---------------+
| TABLE_CAT  | TABLE_SCHEM  | TABLE_NAME  | COLUMN_NAME  | DATA_TYPE  | TYPE_NAME  | COLUMN_SIZE  | BUFFER_LENGTH  | DECIMAL_DIGITS  | NUM_PREC_RADIX  | NULLABLE  | REMARKS  | COLUMN_DEF  | SQL_DATA_TYPE |
+------------+--------------+-------------+--------------+------------+------------+--------------+----------------+-----------------+-----------------+-----------+----------+-------------+---------------+
|            |              | WUDL_TABLE  | ID           | -5         | BIGINT     | null         | null           | null            | null            | 0         |          |             | null          |
|            |              | WUDL_TABLE  | NAME         | 12         | VARCHAR    | null         | null           | null            | null            | 1         |          |             | null          |
|            |              | WUDL_TABLE  | ADDRESS      | 12         | VARCHAR    | null         | null           | null            | null            | 1         |          |             | null          |
+------------+--------------+-------------+--------------+------------+------------+--------------+----------------+-----------------+-----------------+-----------+----------+-------------+---------------+
0: jdbc:phoenix:master01.pxx.com:2181/hbase-u> 

查看历史命令:

jdbc:phoenix:master01.pxx.com:2181/hbase-u> !history
179.  177: CREATE TABLE IF NOT EXISTS wudl_table (
180.  178:       id bigint  primary key,
181.  179:       name VARCHAR ,
182.  180:       address varchar 
183.  181:       );
184.  182: upsert into wudl_table values(0001,'flink','深圳');
185.  183: upsert into wudl_table values(0002,'spark','上海');
186.  184: select * from wudl_table;
187.  185:  DELETE FROM wudl_table WHERE name = '上海';
188.  186: select * from wudl_table;
189.  187:  DELETE FROM wudl_table WHERE NAME = '上海';
190.  188: select * from wudl_table;
191.  189: DELETE FROM wudl_table WHERE address = '上海';
192.  190: select * from wudl_table;
193.  191: !describe wudl_table;
194.  192: !history
0: jdbc:phoenix:master01.pxx.com:2181/hbase-u> 

!dbinfo 可以查看Phoenix所有的属性配置:

0: jdbc:phoenix:master01.pxx.com:2181/hbase-u> !dbinfo
allProceduresAreCallable                          false
allTablesAreSelectable                            true
dataDefinitionCausesTransactionCommit             false
dataDefinitionIgnoredInTransactions               false
doesMaxRowSizeIncludeBlobs                        false
getCatalogSeparator                               .
getCatalogTerm                                    Tenant
getDatabaseProductName                            Phoenix
getDatabaseProductVersion                         5.0

查看表的索引:

!indexes wudl_table;

更多的命令:

+------------+--------------+-------------+-------------+------------------+-------------+-------+-------------------+--------------+--------------+--------------+--------+-------------------+------------+
0: jdbc:phoenix:master01.pxx.com:2181/hbase-u> !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
 ...............................

7.重点---- Hbase 映射到phoenx ----

7.1 需要注意的点:

1. sql语句需要分号“;”结束。
2. 带!号开始的命令可以不使用分号结束
3. 表名小写的phoenix会自动转大写,小写可以使用"table_name"即双引号引起来即可是小写
4. 通过Phoenix建的表都会自动转成大写,如果需要使用小写的表,请使用`create table  "tablename"。

7.2 需要配置映射文件

这里一定要注意:如果设置为true,创建的带有schema的表将映射到一个namespace,这个需要客户
端和服务端同时设置。一旦设置为true,就不能回滚了。旧的客户端将无法再正常工作。所以建议大家
都查看官方文档,确定后再进行设置
<property>
    <name>phoenix.schema.isNamespaceMappingEnabled</name>
    <value>true</value>
</property>
<property>
    <name>phoenix.schema.mapSystemTablesToNamespace</name>
    <value>true</value>
</property>

7.2.1如果是ambari 需要在添加 这两个属性

在这里插入图片描述

7.2.2 启动如果出现错误:

如果报以下错误提示
Traceback (most recent call last):
File "./sqlline.py", line 27, in
import argparse
ImportError: No module named argparse
解决办法:
在安装phoenix的服务器上安装该模块。
yum -y install python-argparse

7.3 视图的映射:

默认情况下, 直接在 HBase 中创建的表通过 Phoenix 是查不到的.

7.3.1hbase 创建命名空间类似于mysql 的数据库

hbase(main):002:0> create_namespace 'wudl002'
Took 0.6196 seconds                                                                                                                                  
hbase(main):003:0> create 'wudl002:wudl002',{NAME=>'cf',BLOCKCACHE=>true,BLOOMFILTER=>'ROW', BLOCKSIZE => '65536'}
Created table wudl002:wudl002
Took 2.6594 seconds                                                                                                                                  
=> Hbase::Table - wudl002:wudl002
                                              

7.3.2插入数据:

hbase(main):004:0> put 'wudl002:wudl002','1DE5555520201231155811','cf:id','17560'
Took 1.0791 seconds                                                                                                                                  
hbase(main):005:0> put 'wudl002:wudl002','1DE5555520201231155811','cf:creator','15088888888'
Took 0.0158 seconds                                                                                                                                  
hbase(main):006:0> put 'wudl002:wudl002','1DE5555520201231155811','cf:creator_id','10201000064'
Took 0.0097 seconds                                                                                                                                  
hbase(main):007:0> put 'wudl002:wudl002','1DE5555520201231155811','cf:create_time','2021-01-04 10:45:58'
Took 0.0099 seconds                                                                                                                                  
hbase(main):008:0> put 'wudl002:wudl002','1DE5555520201231155811','cf:updater','15088888888'
Took 0.0650 seconds                                                                                                                                  
hbase(main):009:0> put 'wudl002:wudl002','1DE5555520201231155811','cf:updater_id','10201000064'
Took 0.0698 seconds                                                          

7.3.3查询数据

hbase(main):010:0> scan 'wudl002:wudl002'
ROW                                    COLUMN+CELL                                                                                                   
 1DE5555520201231155811                column=cf:create_time, timestamp=1614909429189, value=2021-01-04 10:45:58                                     
 1DE5555520201231155811                column=cf:creator, timestamp=1614909429093, value=15088888888                                                 
 1DE5555520201231155811                column=cf:creator_id, timestamp=1614909429147, value=10201000064                                              
 1DE5555520201231155811                column=cf:id, timestamp=1614909428803, value=17560                                                            
 1DE5555520201231155811                column=cf:updater, timestamp=1614909429327, value=15088888888                                                 
 1DE5555520201231155811                column=cf:updater_id, timestamp=1614909430434, value=10201000064                                              
1 row(s)
Took 0.2956 seconds                                  

7.4 在phoenix
7.4.1创建命名空间:

0: jdbc:phoenix:master01.pxx.com:2181/hbase-u> CREATE SCHEMA IF NOT EXISTS "wudl002";
No rows affected (0.19 seconds)

7.4.2 创建表:
特别注意 创建表 是类型最好用verchar 类型 还有结尾要用column_encoded_bytes = 0; 不然映射不到


CREATE SCHEMA IF NOT EXISTS "wudl002";

CREATE TABLE "wudl002"."wudl002" (
    "ROW" VARCHAR PRIMARY KEY,
    "cf"."id" VARCHAR,
    "cf"."creator" VARCHAR,
    "cf"."creator_id" VARCHAR,
    "cf"."create_time" VARCHAR,
    "cf"."updater" VARCHAR,
    "cf"."updater_id" VARCHAR
) column_encoded_bytes = 0;

7.4.3查看结果:

0: jdbc:phoenix:master01.pxx.com:2181/hbase-u> select * from "wudl002"."wudl002";
+-------------------------+--------+--------------+--------------+----------------------+--------------+--------------+
|           ROW           |   id   |   creator    |  creator_id  |     create_time      |   updater    |  updater_id  |
+-------------------------+--------+--------------+--------------+----------------------+--------------+--------------+
| 1DE5555520201231155811  | 17560  | 15088888888  | 10201000064  | 2021-01-04 10:45:58  | 15088888888  | 10201000064  |
+-------------------------+--------+--------------+--------------+----------------------+--------------+--------------+
1 row selected (0.367 seconds)
0: jdbc:phoenix:master01.pxx.com:2181/hbase-u> 

完成****

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容