Hbase单机部署&phoenix引入

本文详细介绍了在CentOS7环境下,如何搭建HBase单机版本并集成Phoenix,包括软件版本选择、环境配置、安装步骤、表创建、索引使用等关键操作,对比了有无索引情况下的查询效率。

Hbase搭建

单机版本搭建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
添加内容:

<configuration>
        <property>
                <name>hbase.rootdir</name>
                <value>file:/home/XXX/hbase_data/hbase</value>
        </property>
        
</configuration>

引入phoenix

注意:使用phoenix要对应hbase的版本,根据phoenix命名对应
35EEF795-4708-4050-BC88-A259F949E68A.png
刚开始我使用了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标签中添加内容:

<property>
                <name>hbase.regionserver.wal.codec</name>
                <value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
        </property>

启动

启动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最近一条的设备状态数据

不使用索引耗时:5.439 seconds
63D3732C-2BC0-4E0D-B8FD-CFB326B36E62.png

创建索引:
CREATE INDEX equip_index ON equip_status(equip_id,create_time desc,status);
查询耗时:0.036 seconds
027A1B17-D21D-4B84-91CD-74423F76A84F.png

### 如何在 HBase 单机部署中连接到外部 ZooKeeper 要在 HBase单机部署环境中连接到外部的 ZooKeeper 实例,需要完成以下几个方面的配置: #### 1. 修改 `hbase-env.sh` 文件 为了确保 HBase 不再管理其内部的 ZooKeeper 实例,需将环境变量 `HBASE_MANAGES_ZK` 设置为 `false`。这可以通过编辑 `$HBASE_HOME/conf/hbase-env.sh` 文件实现[^1]。 ```bash export HBASE_MANAGES_ZK=false ``` 此操作会禁用 HBase 对内置 ZooKeeper 的控制,从而允许它与外部 ZooKeeper 集群协同工作。 --- #### 2. 编辑 `hbase-site.xml` 文件 接下来,在 `$HBASE_HOME/conf/hbase-site.xml` 中指定外部 ZooKeeper 的地址和端口。以下是具体的 XML 配置示例[^4]: ```xml <configuration> <!-- 指定外部 ZooKeeper 地址 --> <property> <name>hbase.zookeeper.quorum</name> <value>localhost</value> <!-- 替换为实际的 ZooKeeper 主机名或 IP 地址 --> </property> <!-- 指定 ZooKeeper 客户端端口号,默认为 2181 --> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> </property> <!-- 可选:设置根目录路径 --> <property> <name>zookeeper.znode.parent</name> <value>/hbase-unsecure</value> </property> </configuration> ``` 在此配置中: - 将 `<value>` 节点替换为目标 ZooKeeper 实例的实际主机名或 IP 地址。 - 如果目标 ZooKeeper 是集群模式,则可以提供多个逗号分隔的主机列表(例如 `zk1.example.com,zk2.example.com,zk3.example.com`)[^3]。 --- #### 3. 启动外部 ZooKeeper 并验证状态 在连接之前,确认外部 ZooKeeper 已经正常运行并处于可用状态。通过执行以下命令来检查 ZooKeeper 的当前状态: ```bash $ zkServer.sh status ``` 预期输出类似于以下内容,表明服务正在运行且监听默认客户端端口 (2181): ``` ZooKeeper JMX enabled by default Using config: /path/to/zookeeper/conf/zoo.cfg Client port found: 2181. Client address: localhost. Mode: standalone ``` 如果未找到任何活动实例,请先按照官方文档启动 ZooKeeper[^2]。 --- #### 4. 启动 HBase 并测试连接 完成上述配置后,依次启动 HBase 和相关组件。具体步骤如下: 1. **启动 HBase** 执行以下命令以启动 HBase: ```bash $ start-hbase.sh ``` 2. **验证连接成功与否** 登录至 HBase Shell 来检验是否能够正确访问数据表以及与外部 ZooKeeper 建立通信关系: ```bash $ hbase shell ``` 在交互界面下尝试创建新表或者查询现有元信息记录: ```shell create 'test', 'cf' list describe 'test' disable 'test' drop 'test' exit ``` 如果没有报错提示说明已成功接入外网型 ZK 环境! --- ### 注意事项 - 若遇到网络延迟较高或其他异常情况时,可适当调整超时参数如 zookeeper.session.timeout.ms 或 retry 数量等选项进一步优化性能表现; - 当前仅适用于单节点场景下的实验性质用途;生产环境下建议采用分布式架构设计原则构建高可靠性的解决方案体系结构模型框架平台系统工程方法论实践指南手册参考资料链接网址URL地址位置定位导航地图路线图规划方案策略战术技巧技能经验分享交流学习教育培训机构课程教材书籍
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值