This configuration builds a docker container to run HBase (with embedded Zookeeper) running on the files inside the container.
The approach here requires editing the local server's /etc/hosts
file to add an entry for the container hostname. This is because
HBase uses hostnames to pass connection data back out of the
container (from it's internal Zookeeper).
Hopefully this can be improved with Docker's newer networking but this hasn't been fixed yet.
$ docker build -t wgzhao/hbase .
If you want to pull the image already built then use this
$ docker pull wgzhao/hbase
More details at https://hub.docker.com/r/wgzhao/hbase/
I recommend using the start-hbase.sh script which will start the
container and inspect it to determine all the local API ports and Web
UIs plus will offer to edit /etc/hosts to add an alias for the
container IP, if not already present.
$ ./start-hbase.sh
start-hbase.sh: Starting HBase container
start-hbase.sh: Container has ID b2db2fb3c3a67e20e2addd5e4d2ffc9a51abaafc3f9b36f464af7739e82f6446
start-hbase.sh: /etc/hosts already contains hbase-docker hostname and IP
start-hbase.sh: Connect to HBase at localhost on these ports
REST API 127.0.0.1:32874
Rest Web UI http://127.0.0.1:32873/
Thrift2 API 127.0.0.1:32872
Thrift2 Web UI http://127.0.0.1:32871/
HBase ZK 127.0.0.1:32875
HBase Master Web UI http://127.0.0.1:32870/
start-hbase.sh: OR Connect to HBase on container hbase-docker
REST API hbase-docker:8080
Rest Web UI http://hbase-docker:8085/
Thrift2 API hbase-docker:9090
Thrift2 Web UI http://hbase-docker:9095/
HBase ZK hbase-docker:2181
HBase Master Web UI http://hbase-docker:16010/
start-hbase.sh: For docker status:
start-hbase.sh: $ id=b2db2fb3c3a67e20e2addd5e4d2ffc9a51abaafc3f9b36f464af7739e82f6446
start-hbase.sh: $ docker inspect $id
The localhost ports on the Host machine listed above 32870-32874 will vary for every container and are ephemeral ports.
Alternatively, to run HBase by hand:
$ mkdir data
$ id=$(docker run --name=hbase-docker -h hbase-docker -d -v $PWD/data:/data wgzhao/hbase)
and you will have to docker inspect $id to find all the ports.
If you want to run multiple hbase dockers on the same host, you can
give them different hostnames with the -h / --hostname argument.
You may have to give them different ports though. Not tested.
If you want to customize the hostname used, set the
HBASE_DOCKER_HOSTNAME envariable on the docker command line
Master status if docker container DNS name is 'hbase-docker'
http://hbase-docker:16010/master-status
The region servers status pages are linked from the above page.
Thrift2 UI
http://hbase-docker:9095/thrift.jsp
REST server UI
http://hbase-docker:8085/rest.jsp
(Embedded) Zookeeper status
http://hbase-docker:16010/zk.jsp
If you want to see the latest logs live use:
$ docker attach $id
Then ^C to detach.
To see all the logs since the HBase server started, use:
$ docker logs $id
and ^C to detach again.
To see the individual log files without using docker, look into
the data volume dir eg $PWD/data/logs if invoked as above.
Here I am connecting to a the container's thrift API port (such as created by the start-hbase.sh script). The port 32872 is the Thrift API port exported to the host because Easybase uses Thrift2 to talk to HBase.
$ python3
Python 3.7.3 (default, Sep 5 2019, 17:14:41)
[Clang 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import easybase
>>> connection = easybase.Connection('127.0.0.1', 32786)
>>> connection.create_table('htable', { 'family': dict() } )
>>> table = connection.table('htable')
>>> table.put('rk', {'family:qual1': 'v1', 'family:qual2': 'v2'})
>>> for k, data in table.scan():
... print(k, data)
...
rk {'family:qual1': 'v1', 'family:qual2': 'v2'}
>>>
(Simple install for easybase: sudo pip install easybase although I
use pip install --user easybase to get it just for me)
$ docker run --rm -it --link $id:hbase-docker wgzhao/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.2.6, r88c9a386176e2c2b5fd9915d0e9d3ce17d0e456e, Tue Sep 15 17:36:14 CST 2020
Took 0.0038 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
htable
1 row(s)
Took 0.0509 seconds
=> ["htable"]
hbase(main):003:0>
Showing the htable table made in the easybase example above.
Alternatively if you have the Hbase distribution available on the
host you can use bin/hbase shell if the hbase configuration has
been set up to connect to host hbase-docker zookeeper port 2181 to
get the servers via configuration property hbase.zookeeper.quorum
If you are running docker on a remote machine, it is handy to see these server-private urls in a local browser so here is a ~/.ssh/config fragment to do that
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
When you ssh my-docker-server ssh connects to the docker server and
forwards request on your local machine on ports 16010 / 16030 to the
remote ports that are attached to the hbase container.
The bottom line, you can use these URLs to see what's going on:
to see what's going on in the container and since both your local machine and the container are using localhost (aka 127.0.0.1), even the links work!
Content type
Image
Digest
Size
289.2 MB
Last updated
almost 6 years ago
docker pull wgzhao/hbase