本节在 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节点 容器
代码语言:javascript复制新建 3 终端窗口,分别执行
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
代码语言:javascript复制master、slave01、slave02 都要执行
cp /home/hosts /etc/hosts
检查是否替换成功
代码语言:javascript复制cat /etc/hosts
image-20201227141242809
2.4 启动 ssh
代码语言:javascript复制master、slave01、slave02 都要执行
/etc/init.d/ssh start
image-20201210090723410
测试连接
代码语言:javascript复制在 master 上执行
ssh slave01
中间若出现询问, 输入 yes 即可,如下图,成功连接 slave01, 按此方法
exit
(退出slave01) 后,再连接slave02
image-20201210095343104
到此 3节点 成功建立链接
2.5 格式化Hadoop文件目录(在master上执行)
代码语言:javascript复制3 节点 成功启动,并能连接成功后
只需要格式化一次,以后不需要
/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 查看进程是否启动
代码语言:javascript复制在 master的终端 执行jps命令
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
代码语言:javascript复制此行命令,创建了一个 "student"表,属性有:'Sname','Ssex','Sage','Sdept','course', 因为 HBase 的表中会有
一个系统默认的属性作为主键
,所以主键无需自行创建
,创建完表后,可通过 describe 命令查看 表的基本信息
describe 'student'
image-20201229195036215
4. HBase数据基本操作
4.1 添加数据
代码语言:javascript复制HBase 使用 put 添加数据,一次只能为一个表的一行数据的一个列添加
一个数据
下方为student表添加一行:主键为 21830,名字为 yiyun(一个数据)
put 'student','21830','Sname:','yiyun'
image-20201229195737255
代码语言:javascript复制下方为student表中 主键为 21830 的一行,添加 course列族 的 math列 为 67(一个数据)
put 'student','21830','course:math','67'
image-20201229200317350
4.2 查看数据
HBase 中有两个查看数据的命令:
- get: 用于查看表中某一行
- scan: 查看某个表的全部数据
代码语言:javascript复制查看主键为 21830 的一行
get 'student','21830'
image-20201229200508870
代码语言:javascript复制查看 'student' 表全部数据
scan 'student'
image-20201229200658721
4.3 删除数据
HBase 中删除数据两方式:
- delete: 删除
一个
数据,是 put 的反向操作 - deleteall: 删除
一行
数据
代码语言:javascript复制在删除之前,先添加一点数据
put 'student','21830','Ssex:','man'
代码语言:javascript复制put 'student','12345','Ssex:','man'
代码语言:javascript复制put 'student','12345','Sname:','nana'
代码语言:javascript复制scan 'student'
image-20201229201457669
代码语言:javascript复制删除student表中 主键为 21830 的 行下的Ssex列的所有版本的数据
delete 'student','21830','Ssex'
代码语言:javascript复制scan 'student'
image-20201229201724139
代码语言:javascript复制可以看到 21830 的 Ssex列 已被删除
删除student表中的 12345行 的全部数据
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 许可协议。转载请注明出处!