首先需要保证docker环境是正常的。
1.搜索镜像
docker search hbase
得到如下结果
2.拉取镜像
这里指定版本为1.3
docker pull harisekhon/hbase:1.3
镜像拉取后如下图
3.创建容器
注:容器名称可自定义
方式1
docker run -d --name 容器名称 -P harisekhon/hbase:1.3
例:
docker run -d --name hbase001 -P harisekhon/hbase:1.3
方式2
docker run -d --name 容器名称 -p 16010:16010 harisekhon/hbase:1.3
例:
docker run -d --name hbase001 -p 16010:16010 harisekhon/hbase:1.3
方式3
docker run -d -h myhbase \
-p 2181:2181 \
-p 8080:8080 \
-p 8085:8085 \
-p 9090:9090 \
-p 9095:9095 \
-p 16000:16000 \
-p 16010:16010 \
-p 16201:16201 \
-p 16301:16301 \
--name 容器名称 harisekhon/hbase:1.3
例:
docker run -d -h myhbase \
-p 2181:2181 \
-p 8080:8080 \
-p 8085:8085 \
-p 9090:9090 \
-p 9095:9095 \
-p 16000:16000 \
-p 16010:16010 \
-p 16201:16201 \
-p 16301:16301 \
--name hbase1.3 harisekhon/hbase:1.3
这里我采用的是方式3
4.修改hosts文件
sudo vim /etc/hosts
在文件中加入虚拟机ip地址和hbase指定主机名称的映射,在当前示例中,主机映射的名称为上述方式3 -h 指定的名称,也就是myhbase,然后我的虚拟机ip为192.168.73.66,如下图
5.启动容器
docker start 容器id
6.浏览器访问
http://docker IP:宿主机上(容器)的开放端口 16010对应的指定主机的端口/master-status
例:
http://192.168.73.66:16010/master-status
访问后出现如下界面说明启动hbase成功
7.进入容器内部测试
docker exec -it 容器名称 bash
例:
docker exec -it hbase1.3 bash
进入容器内部后执行
hbase shell
结果如下图
输入命令list测试
8.安装Phoenix
先在外部下载好对应的安装包,然后将安装包拷贝进容器内部,因为直接在容器内部使用wget下载速度太慢了。
下载后将对应的tar.gz先拷贝到虚拟机,再从虚拟机拷贝到容器。
从宿主机拷贝文件到容器里面:
docker cp 宿主机文件路径 容器名:要拷贝到容器里面对应的路径
9.在容器内安装
当把Phoenix拷贝到容器内部之后,我们进入容器内部
按顺序执行指令
# Phoenix依赖python环境,需要安装python
apk add --no-cache python
tar -xzvf apache-phoenix-4.13.1-HBase-1.3-bin.tar.gz
cp apache-phoenix-4.13.1-HBase-1.3-bin/phoenix-4.13.1-HBase-1.3-server.jar hbase-1.3.2/lib/
./hbase/bin/stop-hbase.sh
./hbase/bin/start-hbase.sh
10.Phoenix试用
cd apache-phoenix-4.13.1-HBase-1.3-bin/bin/
./sqlline.py
11.使用Phoenix进行crud
create table t_user(name varchar, age integer not null primary key);
upsert into t_user(name, age) values('Jack', 1);
select * from t_user;
delete from t_user where age = 1;
alter table t_user add version varchar;
alter table t_user drop column version;
上述代码运行结果
注意:
(1)插入值如果是字符串要用单引号引起来,切记不能用双引号!!!
(2)表名如果要体现小写效果,必须要用双引号!!!
# 正确
upsert into "person" values (1, 'test', 100);
# 错误
upsert into "person" values (1, "test", 100);