1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

docker image を使って hbase-shell を実行してみるまで

Last updated at Posted at 2020-08-09

1.はじめに

Apache HBaseは Key-Value 型のデータベースです。
Hadoop プロジェクトの一部として開発され、HDFS (Hadoop Distributed File System)の上で実行されます。
本格的に使うためには、複数のノードからなる Hadoop クラスタの構築が必要となりますが、手元のローカル環境でお試しに実行してみることも可能です。
特に hbase-shell と呼ばれるツールは REPL (Read-Eval-Print-Loop) がベースになっており、表の作成や削除などの管理タスクを実行するコマンドラインツールです。

今回は、Apache HBase の Docker Image を使用し、ローカル環境で hbase-shell を実行していきます。
また、HBaseの実行環境は以下の3つありますが、hbase-shell を試す分には十分なスタンドアローンモードで実行していきます。

  • スタンドアローンモード: 1台のマシン上でHDFS無
  • 疑似分散ローカル : 1台のマシン上でHDFS有
  • 完全分散環境 : 複数のマシン上でHDFS有

2.(参考)実行環境

2-1. docker と docker-compose がインストールされている

それぞれがインストールされていることが前提になります。

$ docker -v
Docker version 19.03.6, build 369ce74a3c
$ docker-compose -v
docker-compose version 1.17.1, build unknown
2-2. スペック

メモリはトータルで8GB搭載されているマシンを使用しましたが、4GB程度でも問題なく動作します。

$ cat /etc/issue
Ubuntu 18.04.2 LTS
$ cat /proc/meminfo | grep Mem
MemTotal:        8168284 kB
MemFree:         6812556 kB
MemAvailable:    7545960 kB

3. docker-compose の準備

以下のようなファイル(docker-compose.yml)を用意します。
ここでは、Apache HBase の docker image として、"blueskyareahm/hbase-base:2.1.3"、また zookeeper 用として、"blueskyareahm/hbase-zookeeper:3.4.13" を指定していますが、コンテナ起動時に各 Service を起動するためのスクリプトが実行されるようになっています。
これらのイメージは alpine:3.10 を元に作成しています。

docker-compose.yml
version: '2'

services:
  hbase-master:
    image: blueskyareahm/hbase-base:2.1.3
    command: master
    ports:
      - 16000:16000
      - 16010:16010

  hbase-regionserver:
    image: blueskyareahm/hbase-base:2.1.3
    command: regionserver
    ports:
      - 16030:16030
      - 16201:16201
      - 16301:16301

  zookeeper:
    image: blueskyareahm/hbase-zookeeper:3.4.13
    ports:
      - 2181:2181

こちらの docker-compose.yml ファイルからは、hbase-master と hbase-regionserver、そして zookeeper それぞれ一つずつコンテナが生成されることになります。
それぞれのコンテナ(サービス)が成すHBaseのシステム構成は以下のようなイメージです。
HBaseSystemConstitution.PNG

4. コンテナのビルド・開始

docker-compose.yml が配置されているディレクトリで以下のコマンドを実行します。

$ docker-compose up --build -d
Starting dockerhbase_hbase-regionserver_1 ... 
Starting dockerhbase_zookeeper_1 ... 
Starting dockerhbase_hbase-regionserver_1
Starting dockerhbase_zookeeper_1
Starting dockerhbase_hbase-master_1 ... 
Starting dockerhbase_hbase-regionserver_1 ... done

コマンドで確認すると、docker-compose.yml 内で指定した docker image がローカルにダウンロードされたことが確認できます。

$ docker images
REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
blueskyareahm/hbase-base           2.1.3               bc85bf9cde47        6 days ago          394MB
blueskyareahm/hbase-zookeeper      3.4.13              b84eed2da9c6        6 days ago          150MB

また、hbase-master, hbase-regionserver, zookeeper それぞれ一つずつコンテナが起動されていることが確認できます。

$ docker ps
CONTAINER ID        IMAGE                                  COMMAND                  CREATED             STATUS              PORTS                                                                                                                                                  NAMES
55d31613504a        blueskyareahm/hbase-base:2.1.3         "/entrypoint.sh mast…"   5 days ago          Up About a minute   2181/tcp, 8080/tcp, 8085/tcp, 9090/tcp, 0.0.0.0:16000->16000/tcp, 9095/tcp, 16030/tcp, 16201/tcp, 16301/tcp, 0.0.0.0:16010->16010/tcp                  dockerhbase_hbase-master_1
69b00dbc3b83        blueskyareahm/hbase-base:2.1.3         "/entrypoint.sh regi…"   5 days ago          Up About a minute   2181/tcp, 8080/tcp, 8085/tcp, 9090/tcp, 9095/tcp, 16000/tcp, 0.0.0.0:16030->16030/tcp, 0.0.0.0:16201->16201/tcp, 16010/tcp, 0.0.0.0:16301->16301/tcp   dockerhbase_hbase-regionserver_1
0a9ac6fc557c        blueskyareahm/hbase-zookeeper:3.4.13   "/entrypoint.sh"         5 days ago          Up About a minute   3181/tcp, 0.0.0.0:2181->2181/tcp, 4181/tcp                                                                                                             dockerhbase_zookeeper_1

5. hbase-shell の開始

以下のコマンドで hbase-shell を開始します。
今回は hbase-master コンテナ内の hbase-shell コマンドより開始しています。

$ docker-compose exec hbase-master hbase shell
--- 省略 ---
hbase(main):001:0>

6. hbase-shell から操作してみる

ヘルプ表示
hbase(main):001:0> help
HBase Shell, version 2.1.3, rda5ec9e4c06c537213883cca8f3cc9a7c19daf67, Mon Feb 11 15:45:33 CST 2019
--- 省略 ---
The HBase shell is the (J)Ruby IRB with the above HBase-specific commands added.
For more on the HBase Shell, see http://hbase.apache.org/book.html
テーブルの作成

Table名(test) と ColumnFamily名('cf') を指定する必要があります。

hbase(main):002:0> create 'test', 'cf'
Created table test
Took 2.9629 seconds 
=> Hbase::Table - test
テーブルの存在確認
hbase(main):003:0> list 'test'
TABLE
test
1 row(s)
Took 0.1438 seconds
=> ["test"]

hbase(main):004:0> list 'dummy'
TABLE
0 row(s)
Took 0.0259 seconds
=> []
テーブルの一覧表示
hbase(main):005:0> list
TABLE
t1
test
2 row(s)
Took 0.0276 seconds
=> ["t1", "test"]
テーブルの構成確認
hbase(main):006:0> describe 'test'
Table test is ENABLED
test
COLUMN FAMILIES DESCRIPTION
{NAME => 'cf', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE
 => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRI
TE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true
', BLOCKSIZE => '65536'}
1 row(s)
Took 0.4172 seconds
データの挿入

それぞれの引数の意味が put 'テーブル名', 'キー', 'カラム名', 'データ' になります。

hbase(main):007:0> put 'test', 'row1', 'cf:a', 'value1'
Took 0.3695 seconds
hbase(main):008:0> put 'test', 'row2', 'cf:b', 'value2'
Took 0.0187 seconds
hbase(main):009:0> put 'test', 'row1', 'cf:c', 'value3'
Took 0.0236 seconds

この例では、row1 のキーに対しては2つのカラム('cf:a', 'cf:c')にデータを挿入しています。
row2 のキーに対しては、1つのカラム('cf:b')にデータを挿入しています。

テーブル内データの参照

'test' テーブル内の全データをスキャンしています。
row1 に2つ、row2 に1つのデータが挿入されていることが分かります。

hbase(main):010:0> scan 'test'
ROW               COLUMN+CELL
 row1             column=cf:a, timestamp=1596974012058, value=value1
 row1             column=cf:c, timestamp=1596974230499, value=value3
 row2             column=cf:b, timestamp=1596974204249, value=value2
2 row(s)
Took 0.0885 seconds
特定の row のデータを取得

row(キー)を指定することで、特定の row のデータを取得できます。

hbase(main):011:0> get 'test', 'row1'
COLUMN               CELL
 cf:a                timestamp=1596974012058, value=value1
 cf:c                timestamp=1596974230499, value=value3
1 row(s)
Took 0.0780 seconds
テーブルの無効化

もしテーブルを削除したい場合、HBase ではそのテーブルをまず無効化する必要があります。

hbase(main):012:0> disable 'test'
Took 0.9336 seconds

hbase(main):014:0> describe 'test'
Table test is DISABLED
test
COLUMN FAMILIES DESCRIPTION
{NAME => 'cf', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE
 => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRI
TE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true
', BLOCKSIZE => '65536'}
1 row(s)
Took 0.0598 seconds

describe コマンドで確認すると、無効化(Table test is DISABLED) されていることが分かります。
有効化する場合は enable コマンドを使用します。

hbase(main):012:0> enable 'test'
テーブルの削除

テーブルが無効化されている状態で、drop コマンドを使います。

hbase(main):015:0> drop 'test'
Took 0.5828 seconds

hbase(main):016:0> list 'test'
TABLE
0 row(s)
Took 0.0087 seconds
=> []
hbase-shell の終了
hbase(main):017:0> exit

7. さいごに

実運用上でデータの挿入や取得は、Javaなどのアプリケーションから行うことが主になると思われます。
テーブル上のデータの参照に関しても、大量のデータから何らかのフィルタ条件を元にデータを取得するには別途アプリケーションを用意した方が便利と思われます。

テーブルの作成や、開発中にテストデータを入れたり、その内容を確認する用として hbase-shell は便利なツールです。
Key-Value 型データベースである HBase を最初に学ぶ上で hbase-shell は手助けとなるシーンは多いと思います。
docker image を使用することで、最短5分ほどで hbase-shell 実行環境まで用意することができます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?