利用 docker-compose,搭建本地 HBase 集群

最近在重构公司的直播推荐服务,特征数据的存储使用的是 Hbase,但有个问题是我们的开发环境并没有搭建 HBase 集群,开发环境和生产环境网络又不通,这样本地调试就很不方便,所以我需要在本地搭一个 HBase 集群。

第一时间想到的就是使用 docker-compose

牛顿老师说过,轮子还是别人的圆,于是我在 gayhub 上找到了这个轮子:https://github.com/big-data-europe/docker-hbase

但是在搭建过程中发现了它的问题,有两个重要的端口没有在 docker-compose.yml 文件中开放,并且说明中没有提示要修改 hosts,再看了下这个仓库的更新时间,已经有 3 年没有更新,所以我也就不提 pr 了,而是将仓库进行了 fork 并修改了源码,可以直接 clone 我的仓库来搭建,流程如下:

1. 将代码 clone 到本地

1
2
git clone git@github.com:Panmax/docker-hbase.git
cd docker-hbase

2. /etc/hosts 中添加以下两项

1
2
0.0.0.0 hbase-master
0.0.0.0 hbase-region

3. 启动

1
docker-compose -f docker-compose-distributed-local.yml up

等待所有服务完全启动后,就可以让我们的程序通过监听在本地 2181 端口的 zookeeper 去发现并访问 hbase 了。

Hbase 数据录入

为了验证代码逻辑,我还需要写一些数据到 hbase 中,操作如下:

1. 进入容器

1
docker exec -it hbase-master bash

2. 进入 hbase 安装目录

1
cd /opt/hbase-1.2.6/

3. 运行 hbase shell

1
bin/hbase shell

然后就可以使用SQL语句进行操作了,例如:

1
2
3
4
5
6
7
8
9
> create 'mods_model_storage', 'f'
> put 'mods_model_storage','model1','f:model', 'model content1'
> put 'mods_model_storage','model2','f:model', 'model content2'

> scan 'mods_model_storage'
ROW COLUMN+CELL
model1 column=f:model, timestamp=1617605399565, value=model content1
model2 column=f:model, timestamp=1617605400576, value=model content2
2 row(s) in 0.0330 seconds