SHOEISHA iD

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

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

初めてのHBase

HBaseでトランザクションを扱ってみよう

初めてのHBase 第10回

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

Omidを使ってみる

 それでは、実際にOmidを使ってみましょう。

事前準備

 まずは下記のように、Githubからソースコードをダウンロードします。

$ git clone https://github.com/yahoo/omid.git omid

 次に、mvnコマンドでインストールを行います。

$ cd omid
$ mvn install -DskipTests

 TSOサーバを立ち上げましょう。

$ bin/omid.sh tso

 Omidではコプロセッサを使用するため、HBaseを起動する前に、OmidのjarをHBaseのインストールディレクトリのlibディレクトリ以下にコピーする必要があります。

$ cp target/omid-1.0-SNAPSHOT.jar <HBaseのインストールディレクトリ>/lib/

 HBaseを起動します。

$ <HBaseのインストールディレクトリ>/bin/start-hbase.sh

 最後に、今回使用するTableを作成する必要があります。

 HBase shellを起動します。

$ <HBaseのインストールディレクトリ>/bin/hbase shell

 Tableを作成します。

$ create 'tbl', 'fam'
0 row(s) in 1.0610 seconds

 作成したTableにOmidのコプロセッサを指定します。

 このコプロセッサの詳細については割愛しますが、Compaction時に不必要なデータを消すためのものになります。

$ disable 'tbl'
0 row(s) in 5.0890 seconds

$ alter 'tbl', METHOD => 'table_att', 'coprocessor$1'=>'|com.yahoo.omid.regionserver.Compacter|1|'
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 11.0770 seconds

$ enable 'tbl'
0 row(s) in 6.1310 seconds

クライアントコード

 まず、クライアント側の設定として、pom.xmlに以下のdependencyを指定する必要があります。

 執筆時点でのOmidの最新バージョンは、1.0-SNAPSHOTなのでそちらを指定します。

<dependency>
  <groupId>com.yahoo</groupId>
  <artifactId>omid</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>

 それでは、実際にコードを書いてみましょう。クライアント側のコードは以下のようになります。

Configuration conf = HBaseConfiguration.create();

// TSOサーバの設定……(1)
conf.set("tso.host", "localhost");
conf.set("tso.port", "1234");

// トランザクションマネージャ……(2)
TransactionManager tm = new TransactionManager(conf);

// Table……(3)
TTable table = new TTable(conf, "tbl");

// トランザクション開始……(4)
Transaction t = tm.begin();

byte[] row = Bytes.toBytes("row");
byte[] fam = Bytes.toBytes("fam");
byte[] col = Bytes.toBytes("col");
byte[] val = Bytes.toBytes("val");

// データをPutする……(5)
Put p = new Put(row);
p.add(fam, col, val);
table.put(t, p);

byte[] startrow = Bytes.toBytes("row1");
byte[] stoprow = Bytes.toBytes("row5");

// データをScanする……(6)
ResultScanner rs = table.getScanner(t, new Scan().setStartRow(startrow).setStopRow(stoprow));
Result r = rs.next();
while (r != null) {
   r = rs.next();
}

// コミットする……(7)
tm.commit(t);

// Tableのクローズ……(8)
table.close();

 順を追って説明していきます。

 (1)ではTSOサーバの設定を行っています。TSOサーバはデフォルトで1234番ポートで起動します。

 (2)はクライアント側でトランザクションの管理を行うTransactionManagerのインスタンスを生成しています。

 (3)では、HTabeのラッパークラスであるTTableのインスタンスを生成しています。OmidではTTableをベースにデータのやり取りを行います。

 (4)では、トランザクションの開始を宣言しています。

 (5)(6)では、TTableによってデータをPutやScanを行っています。Scanでは(4)時点でのスナップショットに対して読み込みが行われます(Snapshot Isolation)。

 (7)でコミットをしています。データ更新の競合などでコミットが失敗した場合は、RollbackExceptionがスローされます。

 (8)でTTableをクローズしています。

次のページ
Omidの仕組み

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

  • 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/7707 2014/04/09 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング