SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

初めてのHBase

HBaseを触ってみよう

初めてのHBase 第1回

  • X ポスト
  • このエントリーをはてなブックマークに追加

HBaseにアクセスしてみよう

 それでは、実際にHBaseにshell経由でアクセスしてみましょう。HBase shellを起動します。

$ bin/hbase shell

 最初にTableを作成します。"tbl"という名前のTableを作成し、"fam"という名前のColumnFamilyを定義します。

$ create "tbl", "fam"
0 row(s) in 1.0730 seconds

 次に、データをputしてみます。putは第1引数はTable、第2引数はRowKey、第3引数はColumnFamily:Column、第4引数は値を指定します。

$ put "tbl", "row1", "fam:col1", "val1"
0 row(s) in 0.0230 seconds

 上記では、"tbl"というTableに、RowKeyが"row1"で、ColumnFamily:Columnが"fam:col1"、値が"val1"のRowをputしています。

 次は、データをgetしてみます。

$ get "tbl", "row1", "fam:col1"
COLUMN                                         CELL                                                                                                                                  
 fam:col1                                      timestamp=1357042356309, value=val1                                                                                                   
1 row(s) in 0.0190 seconds

 今度は、同じTable、RowKey、ColumnFamily:Columnで別の値を入れてみます。

$ put "tbl", "row1", "fam:col1", "val2"

 再度getしてみると、値が更新されていることが分かります。

$ get "tbl", "row1", "fam:col1"
COLUMN                                         CELL                                                                                                                                  
 fam:col1                                      timestamp=1357042434369, value=val2                                                                                                   
1 row(s) in 0.0200 seconds

 ここで、以下のようにバージョン数を指定してgetしてみます。

$ get "tbl", "row1", {COLUMN => "fam:col1", VERSIONS => 2}
COLUMN                                         CELL                                                                                                                                  
 fam:col1                                      timestamp=1357042434369, value=val2                                                                                                   
 fam:col1                                      timestamp=1357042356309, value=val1                                                                                                   
2 row(s) in 0.0210 seconds

 このように、HBaseではColumnに対して複数のバージョン(デフォルトで3)を持つことができます。バージョン数を指定しなかった場合は最新のバージョンの値を取得することができます。

 次にデータをdeleteしてみます。

$ delete "tbl", "row1", "fam:col1"
0 row(s) in 0.0200 seconds

 データを取得してみると削除されていることが分かります。

$ get "tbl", "row1", "fam:col1"
COLUMN                                         CELL                                                                                                                                  
0 row(s) in 0.0230 seconds

 ちなみに、Columnが複数ある場合にRowをまるごと削除したい場合はdeleteallを使用します。

$ deleteall "tbl", "row1"
0 row(s) in 0.0230 seconds

 最後にscanを試してみましょう。

 まずは、以下のようにデータを入れます。

$ put "tbl", "row1", "fam:col1", "val1"
0 row(s) in 0.0170 seconds

$ put "tbl", "row1", "fam:col2", "val2"
0 row(s) in 0.0170 seconds

$ put "tbl", "row2", "fam:col1", "val3"
0 row(s) in 0.0190 seconds

$ put "tbl", "row3", "fam:col1", "val4"
0 row(s) in 0.0190 seconds

$ put "tbl", "row4", "fam:col1", "val5"
0 row(s) in 0.0190 seconds

 scanを実行して全データを取得してみます。

$ scan "tbl"
ROW                                            COLUMN+CELL                                                                                                                           
 row1                                          column=fam:col1, timestamp=1357045614868, value=val1                                                                                  
 row1                                          column=fam:col2, timestamp=1357045619579, value=val2                                                                                  
 row2                                          column=fam:col1, timestamp=1357045624980, value=val3                                                                                  
 row3                                          column=fam:col1, timestamp=1357045628986, value=val4                                                                                  
 row4                                          column=fam:col1, timestamp=1357045633027, value=val5                                                                                  
4 row(s) in 0.0290 seconds

 LIMITを指定すると、取得するRow数を限定できます。

$ scan "tbl", {LIMIT => 2}
ROW                                            COLUMN+CELL                                                                                                                           
 row1                                          column=fam:col1, timestamp=1357045614868, value=val1                                                                                  
 row1                                          column=fam:col2, timestamp=1357045619579, value=val2                                                                                  
 row2                                          column=fam:col1, timestamp=1357045624980, value=val3                                                                                  
2 row(s) in 0.0320 seconds

 次に、RowKeyの範囲(STARTROWやSTOPROW)を指定してデータを取得してみます。STOPROWに指定したRowKeyは含まれないことに注意してください。

$ scan "tbl", {STARTROW => "row2"}
ROW                                            COLUMN+CELL                                                                                                                           
 row2                                          column=fam:col1, timestamp=1357045624980, value=val3                                                                                  
 row3                                          column=fam:col1, timestamp=1357045628986, value=val4                                                                                  
 row4                                          column=fam:col1, timestamp=1357045633027, value=val5                                                                                  
3 row(s) in 0.0400 seconds

$ scan "tbl", {STOPROW => "row3"}
ROW                                            COLUMN+CELL                                                                                                                           
 row1                                          column=fam:col1, timestamp=1357045614868, value=val1                                                                                  
 row1                                          column=fam:col2, timestamp=1357045619579, value=val2                                                                                  
 row2                                          column=fam:col1, timestamp=1357045624980, value=val3                                                                                  
2 row(s) in 0.0300 seconds

scan "tbl", {STARTROW => "row2", STOPROW => "row4"}
ROW                                            COLUMN+CELL                                                                                                                           
 row2                                          column=fam:col1, timestamp=1357045624980, value=val3                                                                                  
 row3                                          column=fam:col1, timestamp=1357045628986, value=val4                                                                                  
2 row(s) in 0.0450 seconds

 最後にFilterを使ってみます。

 以下では、TimestampsFilterを使って、timestampが1357045624980のColumnを取得しています。

$ scan "tbl", {FILTER => "TimestampsFilter (1357045624980)"}
ROW                                            COLUMN+CELL                                                                                                                           
 row2                                          column=fam:col1, timestamp=1357045624980, value=val3                                                                                  
1 row(s) in 0.0250 seconds

まとめ

 今回はHBaseの概要を簡単に解説し、HBaseを実際にひと通り動かしてみました。次回はHBaseのもう少し詳細なアーキテクチャについて解説したいと思います。そして、その後はHBaseを使って実際にアプリケーションを作成していく予定です。

 また、株式会社サイバーエージェントでは、Hadoop/HBaseエンジニアを募集しています。ご興味のある方はこちらからエントリーしていただければと思います。エンジニア>R&Dエンジニア>R&Dエンジニアを選択しエントリーしていただければ幸いです。

参考資料

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
初めてのHBase連載記事一覧

もっと読む

この記事の著者

鈴木 俊裕(スズキ トシヒロ)

株式会社サイバーエージェント アメーバ事業本部 Ameba Technology Laboratory 2008年4月に株式会社サイバーエージェントに新卒で入社。基盤システムの開発・運用に従事する。 2010年4月にHadoop/Hiveを用いたログ解析基盤の開発・運用を担当する。 2011年4月に、ログ解析、レコメンド、検索エンジンなどを開発するAmeba Technology Laboratoryの立ち上げメンバーとなる。 2011年10月からHBaseを用...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6940 2013/01/16 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング