Windows Docker 安装配置 HBase

本节在 Windows Docker 安装配置 HBase

Windows Docker 安装部署 Hadoop

0. 实验环境

1. 配置环境

1.1 启动 master 容器

1
docker start -i master

1.2 将 HBase 复制到 容器内 /home

宿主机: F:-1.1.2-bin.tar.gz

Docker 容器:/home/hbase-1.1.2-bin.tar.gz

新建终端窗口

1
docker cp F:/Temp/hbase-1.1.2-bin.tar.gz master:/home/

PS: 不管容器有没有启动,拷贝命令都会生效,若拷贝命令的内容有重复,会直接覆盖,不会询问。

master 内执行,检查是否复制成功

1
ls /home

1.3 解压 HBase 到 /usr/local

1
tar -zxf /home/hbase-1.1.2-bin.tar.gz -C /usr/local

检查是否解压成功

1
ls /usr/local

1.4 查看HBase版本,确定HBase安装成功

1
/usr/local/hbase-1.1.2/bin/hbase version

1.5 保存镜像为 ubuntu/hbaseinstalled

保存为镜像

1
docker commit master ubuntu/hbaseinstalled

检查镜像

1
docker images

2. 测试运行

2.1 删除 旧 容器

先退出 master 容器

1
exit

确保容器已停止

1
docker ps

删除 master、slave01、slave02

1
2
3
docker rm master
docker rm slave01
docker rm slave02

检查容器是否已经被删除

1
docker ps -a

2.2 run 新容器

首先创建并启动 3节点 容器

新建 3 终端窗口,分别执行

1
docker run -it -h master --name master -p 50070:50070 -p 18088:18088 ubuntu/hbaseinstalled
1
docker run -it -h slave01 --name slave01 ubuntu/hbaseinstalled
1
docker run -it -h slave02 --name slave02 ubuntu/hbaseinstalled

补充:

再次启动,只需

1
2
3
docker start -i master
docker start -i slave01
docker start -i slave02

2.3 准备 hosts 文件

由于使用传统ip方式建立链接需要修改hosts,而docker 每次重启容器 hosts 文件都会重置,所以这次事先准备好hosts文件,

在每次重启后,从宿主机复制到容器内,覆盖原 /etc/hosts

先查看容器ip

1
docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)

创建文件 F:/Temp/hosts,内容如下

1
2
3
4
5
6
7
8
9
127.0.0.1       localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 master
172.17.0.3 slave01
172.17.0.4 slave02

从宿主机复制到容器中

1
docker cp F:/Temp/hosts master:/etc/
1
docker cp F:/Temp/hosts slave01:/etc/
1
docker cp F:/Temp/hosts slave02:/etc/

TODO: 直接从宿主机复制文件 hosts 失败

Error response from daemon: Error processing tar file(exit status 1): unlinkat /etc/hosts: device or resource busy

临时解决:先复制到 /home/

1
2
3
4
5
docker cp F:/Temp/hosts master:/home/

docker cp F:/Temp/hosts slave01:/home/

docker cp F:/Temp/hosts slave02:/home/

检查,是否复制成功

1
cat /home/hosts

再复制替换 /etc/hosts

master、slave01、slave02 都要执行

1
cp /home/hosts /etc/hosts

检查是否替换成功

1
cat /etc/hosts

2.4 启动 ssh

master、slave01、slave02 都要执行

1
/etc/init.d/ssh start

测试连接

在 master 上执行

1
ssh slave01

中间若出现询问, 输入 yes 即可,如下图,成功连接 slave01,

按此方法 exit(退出slave01) 后,再连接 slave02

到此 3节点 成功建立链接

2.5 格式化Hadoop文件目录(在master上执行)

3 节点 成功启动,并能连接成功后

只需要格式化一次,以后不需要

1
2
3
/usr/local/hadoop-2.7.3/bin/hdfs namenode -format

hdfs namenode -format

出现上图 ·status 0 说明 成功

2.6 启动 hadoop 集群(在master上执行)

1
start-all.sh

2.7 查看进程是否启动

在 master的终端 执行jps命令

1
jps

在 slave01的终端 执行jps命令

在 slave02 的终端 执行jps命令

至此,hadoop 启动完成

2.8 测试运行 HBase

在 master 上执行

启动 HBase(master上执行)

1
/usr/local/hbase-1.1.2/bin/start-hbase.sh

进入 HBase Shell(master上执行)

1
/usr/local/hbase-1.1.2/bin/hbase shell

在shell模式下输入 help 查看 HBase 相关命令

退出 HBase Shell

1
exit

停止 HBase 运行

1
/usr/local/hbase-1.1.2/bin/stop-hbase.sh

3. HBase 中创建表

1
create 'student','Sname','Ssex','Sage','Sdept','course'

此行命令,创建了一个 "student"表,属性有:'Sname','Ssex','Sage','Sdept','course',

因为 HBase 的表中会有一个系统默认的属性作为主键,所以 主键无需自行创建,创建完表后,可通过 describe 命令查看 表的基本信息

1
describe 'student'

4. HBase数据基本操作

4.1 添加数据

HBase 使用 put 添加数据,一次只能为一个表的一行数据的一个列添加 一个数据

下方为student表添加一行:主键为 21830,名字为 yiyun(一个数据)

1
put 'student','21830','Sname:','yiyun'

下方为student表中 主键为 21830 的一行,添加 course列族 的 math列 为 67(一个数据)

1
put 'student','21830','course:math','67'

4.2 查看数据

HBase 中有两个查看数据的命令:

  1. get: 用于查看表中某一行
  2. scan: 查看某个表的全部数据

查看主键为 21830 的一行

1
get 'student','21830'

查看 'student' 表全部数据

1
scan 'student'

4.3 删除数据

HBase 中删除数据两方式:

  1. delete: 删除 一个 数据,是 put 的反向操作
  2. deleteall: 删除一行数据

在删除之前,先添加一点数据

1
put 'student','21830','Ssex:','man'
1
put 'student','12345','Ssex:','man'
1
put 'student','12345','Sname:','nana'
1
scan 'student'

删除student表中 主键为 21830 的 行下的Ssex列的所有版本的数据

1
delete 'student','21830','Ssex'
1
scan 'student'

可以看到 21830 的 Ssex列 已被删除

删除student表中的 12345行 的全部数据

1
deleteall 'student','12345'
1
scan 'student'

可以看到 12345 行的所有数据均被删除

Q&A

补充

参考