HBaseをインストールしてCRUDしてみる
HBaseをインストールして、hbase shellからCRUDしてみたメモです。
HBase 1.2.0をインストールして、コマンドラインツールのhbase shellからCRUDを試してみました。
下記環境で試してみます。
・Windows10
・VirtualBox 5.2.16
・cdh5.13.0 (HBase 1.2.0)
インストール
clouderaのディストリビューションを使用してみます。
下記ページからVM別のイメージがダウンロード出来るので、VirtualBox用のイメージをダウンロードしました。
試した時点のバージョンはcdh5.13.0です。
https://www.cloudera.com/downloads/quickstart_vms/5-13.html
cloudera-quickstart-vm-5.13.0-0-virtualbox.zip
zipを解凍し、
cloudera-quickstart-vm-5.13.0-0-virtualbox.ovfをvirtualvoxで起動します。
VMを起動するとHBaseも起動します。
ユーザは
cloudera/clouderaでログインできます。
確認
HBase shellというツールでコマンドを試してみます。
HBase shell起動
$ hbase shell 2018-07-24 11:01:03,300 INFO [main] Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available HBase Shell; enter 'help<RETURN>' for list of supported commands. Type "exit<RETURN>" to leave the HBase Shell Version 1.2.0-cdh5.13.0, rUnknown, Wed Oct 4 11:16:18 PDT 2017
バージョンとステータス確認
> version 1.2.0-cdh5.13.0, rUnknown, Wed Oct 4 11:16:18 PDT 2017 > status 1 active master, 0 backup masters, 1 servers, 0 dead, 3.0000 average load
namespace, table作成
namespaceとtableを作成します。
それぞれmyspace, mytableという名前で作成してみます。
> create_namespace 'myspace' 0 row(s) in 0.1810 seconds
確認。
list_namespaceでnamespaceを表示。
(デフォルトで作成されているnamespaceも表示されます)
> list_namespace NAMESPACE default hbase myspace 3 row(s) in 0.0250 seconds
existsで対象のtableが存在するか確認。
> exists 'myspace:mytable' Table myspace:mytable does exist 0 row(s) in 0.0130 seconds
テーブル定義確認。
describeで'myspace:mytable'のテーブル定義表示。
> describe 'myspace:mytable' Table myspace:mytable is ENABLED myspace:mytable COLUMN FAMILIES DESCRIPTION {NAME => 'myfamily', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '3', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}
column family作成
column familyを作成します。
myfamilyという名前で作成してみます。
VERSIONSを指定して3世代データを持つようにします。
> create 'myspace:mytable', {NAME => 'myfamily', VERSIONS => 3} 0 row(s) in 1.3820 seconds => Hbase::Table - myspace:mytable
listでテーブルが作成されていることを確認。
> list TABLE myspace:mytable 1 row(s) in 0.0190 seconds => ["myspace:mytable"]
データ追加
putでrowを追加してみます。
row='row1', column='myfamily:name', value='Alice'
のrowを追加してみます。
> put 'myspace:mytable', 'row1', 'myfamily:name', 'Alice' 0 row(s) in 0.1190 seconds
getでrowを確認。
追加したrowを指定し確認してみます。
> get 'myspace:mytable', 'row1' COLUMN CELL myfamily:name timestamp=1532455757730, value=Alice 1 row(s) in 0.0130 seconds
データ更新
putでrowを更新してみます。
row2を追加。
> put 'myspace:mytable', 'row2', 'myfamily:name', 'Bob' 0 row(s) in 0.0030 seconds
同じrow2に対してvalueを変えてputします。
> put 'myspace:mytable', 'row2', 'myfamily:name', 'Bobby' 0 row(s) in 0.0040 seconds
getで確認すると最新のデータが取得できます。
> get 'myspace:mytable', 'row2', 'myfamily:name' COLUMN CELL myfamily:name timestamp=1532455904780, value=Bobby 1 row(s) in 0.0070 seconds
さらに同じrow2に対してvalueを変えてputします。
> put 'myspace:mytable', 'row2', 'myfamily:name', 'Bobbiee' 0 row(s) in 0.0040 seconds
getで確認すると最新のデータが取得できます。
> get 'myspace:mytable', 'row2', 'myfamily:name' COLUMN CELL myfamily:name timestamp=1532455975592, value=Bobbiee 1 row(s) in 0.0120 seconds
getでVERSIONSを指定すると保持しているtimestampの古いバージョンを表示出来ます。
> get 'myspace:mytable', 'row2', COLUMN => 'myfamily:name', VERSIONS => 2 COLUMN CELL myfamily:name timestamp=1532455975592, value=Bobbiee myfamily:name timestamp=1532455904780, value=Bobby 2 row(s) in 0.0070 seconds
column family作成時に3世代持つようにVERSIONSを指定したので
3世代までget出来ます。
> get 'myspace:mytable', 'row2', COLUMN => 'myfamily:name', VERSIONS => 3 COLUMN CELL myfamily:name timestamp=1532455975592, value=Bobbiee myfamily:name timestamp=1532455904780, value=Bobby myfamily:name timestamp=1532455899856, value=Bob 3 row(s) in 0.0070 seconds
scan
row3,row4,row5を追加。
> put 'myspace:mytable', 'row3', 'myfamily:name', 'Cindy' > put 'myspace:mytable', 'row4', 'myfamily:name', 'Dan' > put 'myspace:mytable', 'row5', 'myfamily:name', 'Goth'
scanで指定したテーブルの全rowの最新データを取得出来ます。
> scan 'myspace:mytable' ROW COLUMN+CELL row1 column=myfamily:name, timestamp=1532455757730, value=Alice row2 column=myfamily:name, timestamp=1532455975592, value=Bobbiee row3 column=myfamily:name, timestamp=1532543533581, value=Cindy row4 column=myfamily:name, timestamp=1532543551284, value=Dan row5 column=myfamily:name, timestamp=1532543571710, value=Goth 5 row(s) in 0.0210 seconds
scanでSTARTROW, STOPROWを指定すると、レンジスキャンが可能。
> scan 'myspace:mytable', STARTROW => 'row2', STOPROW => 'row5' ROW COLUMN+CELL row2 column=myfamily:name, timestamp=1532455975592, value=Bobbiee row3 column=myfamily:name, timestamp=1532543533581, value=Cindy row4 column=myfamily:name, timestamp=1532543551284, value=Dan 3 row(s) in 0.0140 seconds
ageのcolumnを追加。
> put 'myspace:mytable', 'row1', 'myfamily:age', 28 > put 'myspace:mytable', 'row2', 'myfamily:age', 19 > put 'myspace:mytable', 'row3', 'myfamily:age', 42 > put 'myspace:mytable', 'row4', 'myfamily:age', 38
確認。
> scan 'myspace:mytable' ROW COLUMN+CELL row1 column=myfamily:age, timestamp=1532544488031, value=28 row1 column=myfamily:name, timestamp=1532455757730, value=Alice row2 column=myfamily:age, timestamp=1532544515162, value=19 row2 column=myfamily:name, timestamp=1532455975592, value=Bobbiee row3 column=myfamily:age, timestamp=1532544523861, value=42 row3 column=myfamily:name, timestamp=1532543533581, value=Cindy row4 column=myfamily:age, timestamp=1532544530476, value=38 row4 column=myfamily:name, timestamp=1532543551284, value=Dan row5 column=myfamily:name, timestamp=1532543571710, value=Goth
scanでCOLUMNSを指定すると特定のcolumnのみ取得可能。
> scan 'myspace:mytable', STARTROW => 'row2', STOPROW => 'row5', COLUMNS => ['myfamily:age'] ROW COLUMN+CELL row2 column=myfamily:age, timestamp=1532544515162, value=19 row3 column=myfamily:age, timestamp=1532544523861, value=42 row4 column=myfamily:age, timestamp=1532544530476, value=38 3 row(s) in 0.0310 seconds
データ削除
下記のrow6をput。
> put 'myspace:mytable', 'row6', 'myfamily:name', 'Heron' > put 'myspace:mytable', 'row6', 'myfamily:age', 55 > put 'myspace:mytable', 'row6', 'myfamily:name', 'Heron!!' > put 'myspace:mytable', 'row6', 'myfamily:age', 56 > put 'myspace:mytable', 'row6', 'myfamily:name', 'Heron123' > put 'myspace:mytable', 'row6', 'myfamily:age', 57 > put 'myspace:mytable', 'row6', 'myfamily:name', 'HeronXXXXXX' > put 'myspace:mytable', 'row6', 'myfamily:age', 58 > scan 'myspace:mytable' ROW COLUMN+CELL row1 column=myfamily:age, timestamp=1532544488031, value=28 row1 column=myfamily:name, timestamp=1532455757730, value=Alice row2 column=myfamily:age, timestamp=1532544515162, value=19 row2 column=myfamily:name, timestamp=1532455975592, value=Bobbiee row3 column=myfamily:age, timestamp=1532544523861, value=42 row3 column=myfamily:name, timestamp=1532543533581, value=Cindy row4 column=myfamily:age, timestamp=1532544530476, value=38 row4 column=myfamily:name, timestamp=1532543551284, value=Dan row5 column=myfamily:name, timestamp=1532543571710, value=Goth row6 column=myfamily:age, timestamp=1533236795416, value=58 row6 column=myfamily:name, timestamp=1533236787029, value=HeronXXXXXX 6 row(s) in 0.0270 seconds
getでrow6を確認。
getでもCOLUMNSを指定すると特定のcolumnのみ取得可能。
> get 'myspace:mytable', 'row6', COLUMN => ['myfamily:name', 'myfamily:age'], VERSIONS => 3 COLUMN CELL myfamily:age timestamp=1533236795416, value=58 myfamily:age timestamp=1533236664596, value=57 myfamily:age timestamp=1533236655241, value=56 myfamily:name timestamp=1533236787029, value=HeronXXXXXX myfamily:name timestamp=1533236659721, value=Heron123 myfamily:name timestamp=1533236649467, value=Heron!! 6 row(s) in 0.0120 seconds
deleteで特定のcolumnを削除。
row6の'myfamily:age'のcolumnを削除。
> delete 'myspace:mytable', 'row6', 'myfamily:age' 0 row(s) in 0.0060 seconds
確認。
row6の'myfamily:age'のcolumnが削除されている。
> get 'myspace:mytable', 'row6', COLUMN => ['myfamily:name', 'myfamily:age'], VERSIONS => 3 COLUMN CELL myfamily:name timestamp=1533236787029, value=HeronXXXXXX myfamily:name timestamp=1533236659721, value=Heron123 myfamily:name timestamp=1533236649467, value=Heron!! 3 row(s) in 0.0080 seconds
再度rowをput。
> get 'myspace:mytable', 'row6', COLUMN => ['myfamily:name', 'myfamily:age'], VERSIONS => 3 COLUMN CELL myfamily:age timestamp=1533236902430, value=58 myfamily:age timestamp=1533236897589, value=57 myfamily:age timestamp=1533236893309, value=56 myfamily:name timestamp=1533236787029, value=HeronXXXXXX myfamily:name timestamp=1533236659721, value=Heron123 myfamily:name timestamp=1533236649467, value=Heron!! 6 row(s) in 0.0130 seconds
タイムスタンプを指定してrow6の'myfamily:age'をdeleteする(value=57のrow)
> delete 'myspace:mytable', 'row6', 'myfamily:age', 1533236897589 0 row(s) in 0.0100 seconds
指定したtimestampより古いrow6の'myfamily:age'が削除される。
> get 'myspace:mytable', 'row6', COLUMN => ['myfamily:name', 'myfamily:age'], VERSIONS => 3 COLUMN CELL myfamily:age timestamp=1533236902430, value=58 myfamily:name timestamp=1533236787029, value=HeronXXXXXX myfamily:name timestamp=1533236659721, value=Heron123 myfamily:name timestamp=1533236649467, value=Heron!! 4 row(s) in 0.0140 seconds
deleteallでrow6全体を削除。
> deleteall 'myspace:mytable', 'row6' 0 row(s) in 0.0090 seconds
row6が削除されていることを確認。
> get 'myspace:mytable', 'row6', COLUMN => ['myfamily:name', 'myfamily:age'], VERSIONS => 3 COLUMN CELL 0 row(s) in 0.0060 seconds
他のrowが削除されてないことを確認。
> scan 'myspace:mytable' ROW COLUMN+CELL row1 column=myfamily:age, timestamp=1532544488031, value=28 row1 column=myfamily:name, timestamp=1532455757730, value=Alice row2 column=myfamily:age, timestamp=1532544515162, value=19 row2 column=myfamily:name, timestamp=1532455975592, value=Bobbiee row3 column=myfamily:age, timestamp=1532544523861, value=42 row3 column=myfamily:name, timestamp=1532543533581, value=Cindy row4 column=myfamily:age, timestamp=1532544530476, value=38 row4 column=myfamily:name, timestamp=1532543551284, value=Dan row5 column=myfamily:name, timestamp=1532543571710, value=Goth 5 row(s) in 0.0160 seconds
========================================================================================
[メモ]
VMをシャットダウンして、再度起動してhbase shellでログインしてコマンドを打つと下記エラーになってしまった。
> status ERROR: Can't get master address from ZooKeeper; znode data == null
Masterの場合
service hbase-master restart
Region Serverの場合
service hbase-regionserver restart
下記の通りHBaseを再起動。
Master再起動
$ sudo service hbase-master restart no master to stop because no pid file /var/run/hbase/hbase-hbase-master.pid Stopped HBase master daemon: [ OK ] starting master, logging to /var/log/hbase/hbase-hbase-master-quickstart.cloudera.out Started HBase master daemon (hbase-master):
Region Server再起動
$ sudo service hbase-regionserver restart Restarting Hadoop HBase regionserver daemon: Stopping Hadoop HBase regionserver daemon: no regionserver to stop because no pid file /var/run/hbase/hbase-hbase-regionserver.pid hbase-regionserver. Starting Hadoop HBase regionserver daemon: starting regionserver, logging to /var/log/hbase/hbase-hbase-regionserver-quickstart.cloudera.out hbase-regionserver.
直った
> status 1 active master, 0 backup masters, 1 servers, 0 dead, 3.0000 average load
終わり。