1 apache-phoenix-5.0.0-HBase-2.0安装与简单使用
HBase版本:hbase-2.0.5
官网地址:https://hbase.apache.org/
Phoenix版本:phoenix-5.0.0-HBase-2.0
Phoenix官网地址:http://phoenix.apache.org/download.html
Phoenix安装文档:http://phoenix.apache.org/installation.html
注意:hbase的版本一定要与phoenix的版本保持一致,否则运行报错
安装步骤:
1 解压下载之后的版本,放到指定的目录下
2 复制phoenix安装目录下的phoenix-core-5.0.0-HBase-2.0.jar
和phoenix-5.0.0-HBase-2.0-server.jar
到各个hbase节点的lib 目录下
cp phoenix-core-5.0.0-HBase-2.0.jar phoenix-5.0.0-HBase-2.0-server.jar /hbase/lib
使用scp或者sync命令同步到其他hbase节点
此步骤需要注意:不要将phoenix-5.0.0-HBase-2.0-client.jar的包放到/hbase/lib目录,会报错,提示java.lang.NoSuchMethodError: com.ctc.wstx.stax.WstxInputFactory.createSR
;具体报错信息如下:
3 编辑环境变量
vim /etc/profile.d/my_env.sh
复制如下到环境变量中
#phoenix
export PHOENIX_HOME=/home/hadoop/app/apache-phoenix-5.0.0-HBase-2.0-bin
export PATH=$PATH:$PHOENIX_HOME/bin
使环境变量生效
source /etc/profile.d/my_env.sh
4 测试是否生效
bin/sqlline.py hadoop101,hadoop102,hadoop103:2181
问题:如果运行bin/sqlline.py一直处于卡住状态,则修改PHOENIX_HOME/bin/log4j.properties
psql.root.logger=DEBUG,console,DRFA
log4j.threshold=DEBUG
查看具体的日志信息,获取具体问题,在针对性的进行解决
我的启动时报错如下:
Caused by: org.apache.hadoop.hbase.ipc.RemoteWithExtrasException(org.apache.hadoop.hbase.NotServingRegionException): org.apache.hadoop.hbase.NotServingRegionException: hbase:meta,,1 is not online on hadoop102,16020,1603519584313
则进入到Zookeeper的客户端执行如下命令
bin/zkCli.sh
deleteall /hbase
quit
hadoop dfs -rm -r -skipTrash /hbase
是由于我重新安装了Hbase导致的,未及时的清理之前hbase残留信息
https://www.cnblogs.com/kekukekro/p/6339587.html
2 Phoenix操作
2.1 Phoenix Shell
2.1.1表的操作
- 1 显示所有表
!table或!tables
- 2 创建表
直接指定单个列作为RowKey
create table if not exists student(
id varchar primary key,
name varchar);
在Phoenix中,表名和字段会自动转换为大写;如果要小写,使用双引号,如"student"
指定多个列的联合作为RowKey
create table if not exists us_population(
state char(2) not null,
city varchar not null,
population bigint
constraint my_pk primary key (state,city));
- 3 插入数据
upsert into student values('1001','zhangsan');
在phoenix是没有insert语句的,而是upsert语句;upsert有两种用法,upsert into 和upsert select
upsert into语句:单条插入外部数据
upsert select语句:类似于hive中的insert select 语句,批量插入其它表中的数据
UPSERT INTO US_POPULATION (STATE,CITY,POPULATION) SELECT STATE,CITY,POPULATION FROM AK_POPULATION WHERE POPULATION < 40000;
-
salt_buckets: Salting能够通过预分区(pre-splitting)数据到多个region中来显著提升读写性能
本质是在hbase中,rowkey的byte数组的第一个字节位置设定一个系统生成的byte值,这个byte值是由主键生成rowkey的byte数组做一个哈希算法,计算得来的。Salting之后可以把数据分布到不同的region上,这样有利于phoenix并发的读写操作。关于SaltedTable的说明在 http://phoenix.apache.org/salted.html
CREATE TABLE TEST (HOST VARCHAR NOT NULL PRIMARY KEY, DESCRIPTION VARCHAR) SALT_BUCKETS=16;
SALT_BUCKETS的值范围在(1 ~ 256)
如果我们用Phoenix创建了一个saltedtable,那么向该表中写入数据时,原始的rowkey的前面会被自动地加上一个byte(不同的rowkey会被分配不同的byte),使得连续的rowkeys也能被均匀地分布到多个regions
UPSERT INTO TEST (HOST,DESCRIPTION) valu