Windows Docker 安装配置 HBase

2022-04-01 13:47:55 浏览数 (1)

本节在 Windows Docker 安装配置 HBase

接 Windows Docker 安装部署 Hadoop

0. 实验环境

  • Docker Desktop for Windows
  • Hadoop 2.7.3
  • HBase 1.1.2
    • hbase-1.1.2-bin.tar.gz

1. 配置环境

1.1 启动 master 容器

代码语言:javascript复制
docker start -i master

1.2 将 HBase 复制到 容器内 /home

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

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

新建终端窗口

代码语言:javascript复制
docker cp F:/Temp/hbase-1.1.2-bin.tar.gz master:/home/

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

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

代码语言:javascript复制
ls /home

image-20201227132629315

1.3 解压 HBase 到 /usr/local

代码语言:javascript复制
tar -zxf /home/hbase-1.1.2-bin.tar.gz -C /usr/local

检查是否解压成功

代码语言:javascript复制
ls /usr/local

image-20201227133005688

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

代码语言:javascript复制
/usr/local/hbase-1.1.2/bin/hbase version

image-20201227133134620

1.5 保存镜像为 ubuntu/hbaseinstalled

保存为镜像

代码语言:javascript复制
docker commit master ubuntu/hbaseinstalled

image-20201227133251574

检查镜像

代码语言:javascript复制
docker images

image-20201227133506643

2. 测试运行

2.1 删除 旧 容器

先退出 master 容器

代码语言:javascript复制
exit

确保容器已停止

代码语言:javascript复制
docker ps

image-20201227133855775

删除 master、slave01、slave02

代码语言:javascript复制
docker rm master
docker rm slave01
docker rm slave02

image-20201227134103004

检查容器是否已经被删除

代码语言:javascript复制
docker ps -a

image-20201227134218707

2.2 run 新容器

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

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

代码语言:javascript复制
docker run -it -h master --name master -p 50070:50070 -p 18088:18088 ubuntu/hbaseinstalled
代码语言:javascript复制
docker run -it -h slave01 --name slave01 ubuntu/hbaseinstalled
代码语言:javascript复制
docker run -it -h slave02 --name slave02 ubuntu/hbaseinstalled

image-20201210085540012

补充:

再次启动,只需

代码语言:javascript复制
docker start -i master
docker start -i slave01
docker start -i slave02

2.3 准备 hosts 文件

由于使用传统ip方式建立链接需要修改hosts,而docker 每次重启容器 hosts 文件都会重置,所以这次事先准备好hosts文件, 在每次重启后,从宿主机复制到容器内,覆盖原 /etc/hosts

先查看容器ip

代码语言:javascript复制
docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)

image-20201227135129458

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

代码语言:javascript复制
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

从宿主机复制到容器中

代码语言:javascript复制
docker cp F:/Temp/hosts master:/etc/
代码语言:javascript复制
docker cp F:/Temp/hosts slave01:/etc/
代码语言:javascript复制
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

image-20201227140356827

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

代码语言:javascript复制
docker cp F:/Temp/hosts master:/home/

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

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

检查,是否复制成功

代码语言:javascript复制
cat /home/hosts

image-20201227140712189

再复制替换 /etc/hosts

master、slave01、slave02 都要执行

代码语言:javascript复制
cp /home/hosts /etc/hosts

检查是否替换成功

代码语言:javascript复制
cat /etc/hosts

image-20201227141242809

2.4 启动 ssh

master、slave01、slave02 都要执行

代码语言:javascript复制
/etc/init.d/ssh start

image-20201210090723410

测试连接

在 master 上执行

代码语言:javascript复制
ssh slave01

中间若出现询问, 输入 yes 即可,如下图,成功连接 slave01, 按此方法 exit(退出slave01) 后,再连接 slave02

image-20201210095343104

到此 3节点 成功建立链接

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

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

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

代码语言:javascript复制
/usr/local/hadoop-2.7.3/bin/hdfs namenode -format
或
hdfs namenode -format

image-20201210100009063

image-20201210100055325

出现上图 ·status 0 说明 成功

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

代码语言:javascript复制
start-all.sh

2.7 查看进程是否启动

在 master的终端 执行jps命令

代码语言:javascript复制
jps

image-20201210100701857

在 slave01的终端 执行jps命令

image-20201210100745828

在 slave02 的终端 执行jps命令

image-20201210100813559

至此,hadoop 启动完成

2.8 测试运行 HBase

在 master 上执行

启动 HBase(master上执行)

代码语言:javascript复制
/usr/local/hbase-1.1.2/bin/start-hbase.sh

image-20201229194322743

进入 HBase Shell(master上执行)

代码语言:javascript复制
/usr/local/hbase-1.1.2/bin/hbase shell

image-20201229194429425

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

image-20201227143025079

退出 HBase Shell

代码语言:javascript复制
exit

停止 HBase 运行

代码语言:javascript复制
/usr/local/hbase-1.1.2/bin/stop-hbase.sh

image-20201229202054705

3. HBase 中创建表

代码语言:javascript复制
create 'student','Sname','Ssex','Sage','Sdept','course'

image-20201229194520759

此行命令,创建了一个 "student"表,属性有:'Sname','Ssex','Sage','Sdept','course', 因为 HBase 的表中会有一个系统默认的属性作为主键,所以 主键无需自行创建,创建完表后,可通过 describe 命令查看 表的基本信息

代码语言:javascript复制
describe 'student'

image-20201229195036215

4. HBase数据基本操作

4.1 添加数据

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

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

代码语言:javascript复制
put 'student','21830','Sname:','yiyun'

image-20201229195737255

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

代码语言:javascript复制
put 'student','21830','course:math','67'

image-20201229200317350

4.2 查看数据

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

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

查看主键为 21830 的一行

代码语言:javascript复制
get 'student','21830'

image-20201229200508870

查看 'student' 表全部数据

代码语言:javascript复制
scan 'student'

image-20201229200658721

4.3 删除数据

HBase 中删除数据两方式:

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

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

代码语言:javascript复制
put 'student','21830','Ssex:','man'
代码语言:javascript复制
put 'student','12345','Ssex:','man'
代码语言:javascript复制
put 'student','12345','Sname:','nana'
代码语言:javascript复制
scan 'student'

image-20201229201457669

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

代码语言:javascript复制
delete 'student','21830','Ssex'
代码语言:javascript复制
scan 'student'

image-20201229201724139

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

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

代码语言:javascript复制
deleteall 'student','12345'
代码语言:javascript复制
scan 'student'

image-20201229201928303

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

Q&A

补充

  • HBase的安装与运行
  • 本文作者: yiyun
  • 本文链接: https://moeci.com/posts/分类-docker/windows-docker-install-hbase/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

0 人点赞