在 Docker 中运行 HBase
此配置构建一个docker容器,以便在容器内的文件上运行HBase(带有嵌入式Zookeeper)。
请注意
此处的方法需要编辑本地服务器的 /etc/hosts 文件以添加容器主机名的条目。这是因为 HBase 使用主机名将连接数据传回容器(从它的内部Zookeeper)。
希望这可以通过 Docker 的新网络得到改善,但尚未得到修复。
构建映像
$ docker build -t dajobe/hbase
拉映像
如果您想拉出已经构建的映像,请使用此
$ docker pull dajobe/hbase
更多详情参见:https://hub.docker.com/r/dajobe/hbase/
运行HBase
手动运行HBase:
$ mkdir data id=$(docker run --name=hbase-docker -h hbase-docker -d -v $PWD/data:/data dajobe/hbase)
运行它并通过编辑在本地调整主机系统 /etc/hosts 将DNS主机名'hbase-docker' 别名为 容器,请使用以下命令:
$ ./start-hbase.sh
这将要求您输入您的 sudo 密码来编辑主机机器的 /etc/hosts 文件。
如果要在同一主机上运行多个 hbase docker,则可以使用 '-h' / '--hostname' 参数为它们提供不同的主机名。 你可能不得不给他们不同的端口。未经测试。
如果要自定义使用的主机名,请设置 docker 命令行上的 HBASE_DOCKER_HOSTNAME envariable
查找Hbase状态
如果 docker 容器 DNS 名称为 'hbase-docker',则为主状态
http://hbase-docker:16010/master-status
区域服务器状态页面是从上一页链接的。
Thrift UI
http://hbase-docker:9095/thrift.jsp
REST 服务器 UI
http://hbase-docker:8085/rest.jsp
(嵌入式)Zookeeper 状态
http://hbase-docker:16010/zk.jsp
请参阅 HBase 日志
如果您想查看最新的日志实时使用:
$ docker attach $id
然后 ^C 分离。
要查看自 HBase 服务器启动以来的所有日志,请使用:
$ docker logs $id
和 ^C 再次分离。
要查看各个日志文件而不使用 docker ,请查看如上所述调用数据卷目录,例如 $PWD/data/logs。
测试 HBase 正在通过 Thrift 上的 python 工作
在这里,我将连接到名为 “hbase-docker” 的 docker 容器(例如由 start-hbase.sh 脚本创建)。 端口 9090 是 Thrift API 端口,因为 [Happybase] [1] [2] 使用 Thrift与HBase通信。
$ python Python 2.7.15 (default, Jan 12 2019, 21:07:57) [GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.11.45.5)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import happybase >>> connection = happybase.Connection('hbase-docker', 9090) >>> connection.create_table('table-name', { 'family': dict() } ) >>> connection.tables() ['table-name'] >>> table = connection.table('table-name') >>> table.put('row-key', {'family:qual1': 'value1', 'family:qual2': 'value2'}) >>> for k, data in table.scan(): ... print k, data ... row-key {'family:qual1': 'value1', 'family:qual2': 'value2'} >>>
(对于happybase的简单安装: sudo pip install happybase 虽然我使用 pip install --user happybase 来获取它仅供我使用)
测试 HBase 正在使用 Java
$ docker run --rm -it --link $id:hbase-docker dajobe/hbase hbase shell HBase Shell Use "help" to get list of supported commands. Use "exit" to quit this interactive shell. For Reference, please visit: http://hbase.apache.org/2.0/book.html#shell Version 2.1.2, r1dfc418f77801fbfb59a125756891b9100c1fc6d, Sun Dec 30 21:45:09 PST 2018 Took 0.0472 seconds hbase(main):001:0> status 1 active master, 0 backup masters, 1 servers, 0 dead, 2.0000 average load Took 0.7255 seconds hbase(main):002:0> list TABLE table-name 1 row(s) Took 0.0509 seconds => ["table-name"] hbase(main):003:0>
显示上面的 happybase 示例中的 table-name 表。
或者,如果主机上有Hbase发行版,则可以使用 bin/hbase shell,如果已将 hbase 配置设置为连接到主机 hbase-docker zookeeper 端口 2181,则通过配置属性hbase.zookeeper.quorum 获取服务器。
本地代理 HBase UI
如果你在远程机器上运行docker,在本地浏览器中看到这些服务器私有URL是很方便的,所以这里有一个〜/.ssh/config 片段来做
Host my-docker-server Hostname 1.2.3.4 LocalForward 127.0.0.1:16010 127.0.0.1:16010 LocalForward 127.0.0.1:9095 127.0.0.1:9095 LocalForward 127.0.0.1:8085 127.0.0.1:8085
当您使用 ssh my-docker-server 时,ssh 连接到 docker 服务器并将端口16010/16030 上的本地计算机上的请求转发到连接到 hbase 容器的远程端口。
最重要的是,您可以使用这些网址查看正在发生的事情:
- http://localhost:16010/master-status 用于主服务器
- http://localhost:9095/thrift.jsp 用于 thrift UI
- http://localhost:8085/rest.jsp 用于 REST 服务器 UI
- http://localhost:16010/zk.jsp 用于嵌入式 Zookeeper
要查看容器中发生了什么,由于本地计算机和容器都使用 localhost(也称为127.0.0.1),即使链接也能正常工作!