前回はHBaseの概要について説明し、実際にHBaseを動かしてみました。今回はHBaseのアーキテクチャについて解説していきたいと思います。
はじめに
HBaseのアーキテクチャについて知ることは、HBaseを使ってアプリケーションを設計するためにとても重要なことです。RDBとは違う部分が多いので最初は理解しにくいかもしれませんが、できるだけ分かりやすく解説していきたいと思います。
対象読者
- HBaseを使ってみたいけど、どう使ったらよいか分からない方
- MySQLなどのRDB以外のデータベースを使ってみたい方
HBaseのデータモデルについてのおさらい
前回もHBaseのデータモデルについて説明しましたが、最初に簡単にデータモデルのおさらいをします。
以下、前回の論理データモデルの説明を箇条書きでまとめたものになります。
- 多次元ソートマップ
Table = SortedMap<RowKey, Map<ColumnFamily, SortedMap<Column, SortedMap<Timestamp, Value>>>>
- Tableがあり複数のRowがRowKeyによって一意に特定される
- すべてのRowはRowKeyによって辞書順にソートされている
- Rowには1つ以上のColumnが存在する
- Tableには1つ以上のColumnFamilyが存在し、ColumnはいずれかのColumnFamilyに所属する
- ColumnFamilyはテーブル作成時に定義する必要があるが、Columnは後から自由に追加できる
- それぞれのColumnには、複数のバージョン(基本的にはTimestampで管理)を持たせることができる
論理的には上記のようなモデルですが、物理的には以下のようにファイルに分割されディスクに格納されます。
- RowKeyの範囲でファイルが分割される(Region)
- さらに、ColumnFamilyごとにファイルを分けてディスクに保存される
- Regionごとに各HRegionServerに割り当てられ負荷が分散される
先ほど示した図の例の場合、以下のようにファイルが分割されることになります。
ただし、HRegionServerにはRegionの単位で割り当てられるので、同じRegionであれば複数のColumnFamilyがあっても同じHRegionServerに割り当てられます。
それぞれのファイルでは、以下のように格納されています。
- 各エントリーはRowKey,ColumnFamily,Column,Timestamp,Valueがセットで格納されている
- RowKey+ColumnFamily+Column+Timestampでソートされている
- 同じRowでも複数のColumnの値が存在する場合は、同じRowKeyのエントリーが複数存在している
- 値がNULLであるColumnを保存しない
- バージョンに関しては、RowKeyやColumnが同じでTimestampのみが違うエントリーとして管理されている
この記事は参考になりましたか?
- 初めてのHBase連載記事一覧
- この記事の著者
-
鈴木 俊裕(スズキ トシヒロ)
株式会社サイバーエージェント アメーバ事業本部 Ameba Technology Laboratory 2008年4月に株式会社サイバーエージェントに新卒で入社。基盤システムの開発・運用に従事する。 2010年4月にHadoop/Hiveを用いたログ解析基盤の開発・運用を担当する。 2011年4月に、ログ解析、レコメンド、検索エンジンなどを開発するAmeba Technology Laboratoryの立ち上げメンバーとなる。 2011年10月からHBaseを用...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア



