单机版本搭建Hbase可以无需使用hadoop,直接使用文件系统存储(本文方式)。也可以使用hadoop hdfs进行存储。
安装环境:centos7
软件版本:jdk1.8.0 hbase2.0.0 phoenix5.0
下载hbase-2.0.0-bin.tar.gz
解压:
tar -xvf hbase-2.0.0-bin.tar.gz
配置:
vi hbase-2.0.0/conf/hbase-env.sh
配置java_home
export JAVA_HOME=/usr/java/jdk1.8.0_211-amd64
使用默认zk
export HBASE_MANAGES_ZK=true
vi hbase-2.0.0/conf/hbase-site.xml
添加内容:
hbase.rootdir
file:/home/XXX/hbase_data/hbase
注意:使用phoenix要对应hbase的版本,根据phoenix命名对应
刚开始我使用了hbase2.0.5 phoenix5.0,创建索引正常,但是插入数据就会报错:
Failed 1 action: org.apache.phoenix.hbase.index.builder.IndexBuildingFailureException: Failed to build index for unexpected reason!
后面将hbase2.0.5换成hbase2.0.0,可以解决此问题。
开始安装:
下载apache-phoenix-5.0.0-HBase-2.0-bin.tar.gz
解压
tar -xvf apache-phoenix-5.0.0-HBase-2.0-bin.tar.gz
将phoenix-5.0.0-HBase-2.0-server.jar复制到hbase-2.0.0/lib/下
cp apache-phoenix-5.0.0-HBase-2.0-bin/phoenix-5.0.0-HBase-2.0-server.jar hbase-2.0.0/lib/
vi hbase-2.0.0/conf/hbase-site.xml
configuration标签中添加内容:
hbase.regionserver.wal.codec
org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec
启动hbase:
hbase-2.0.0/bin/start-hbase.sh
进入hbase控制台:
hbase shell
进入phoenix控制台:
sqlline.py localhost:2181
1.建表
create table if not exists equip_status(id bigint not null,equip_id integer,create_time date,status tinyint constraint my_pk primary key(id));
2.创建自增序列
CREATE SEQUENCE equip_sequence START WITH 10000 INCREMENT BY 1 CACHE 1;
3.插入测试数据
upsert into equip_status values (1,1, TO_DATE('2019-06-05 09:00:02'),0);
UPSERT INTO equip_status(id, equip_id, create_time,status) VALUES( NEXT VALUE FOR equip_sequence,1, TO_DATE('2019-06-05 09:00:03'),0)
4.创建二级索引
CREATE INDEX time_index ON equip_status(create_time desc);
可异步创建索引:
CREATE INDEX time_index ON equip_status(create_time desc) ASYNC;
删除索引:
drop index time_index ON equip_status;
5.使用二级索引查询
select create_time from equip_status order by create_time desc limit 1;
6.使用索引与不使用索引查询耗时对比
数据量:83万条数据
查询语句:
select * from equip_status where equip_id=1 order by create_time desc limit 1;
查询设备id为1最近一条的设备状态数据
创建索引:
CREATE INDEX equip_index ON equip_status(equip_id,create_time desc,status);
查询耗时:0.036 seconds