Apache HBase 概要
HBase とは?
Apache HBase は、米国 Apache Software Foundation が開発し公開しているオープンソースの分散データベース管理システムである。データベースの主流であるリレーショナルデータベースとは異なる構造を持つ NoSQL システムの一つである。
Google が開発し社内システムで内部的に使用している BigTable をモデルに、類似した構造や機能を持つデータベース管理システムをオープンソースソフトウェアとして再現したものである。
同じく ASF が開発して公開している分散ファイルシステム HDFS (Hadoop Distributed File System) を基盤としてデータベースを構築する。リレーショナルデータベースと同じようにテーブル形式でデータを構造化するが、一般的な RDBMS とは異なり、各カラムの値をまとめてストレージ上に記録する。この方式をカラム指向型と呼ぶ。
テーブルの各行 (row) には、カラム名に相当する qualifier と、フィールド値に相当する cell という単位のデータのペアを単位としてデータを保存する。そして、複数の qualifier が column family としてグループ化されている。cell のデータは自動的に履歴管理され、過去の任意時点のデータを呼び出すことができる。
複数のサーバーコンピュータで 1 つのデータベースを管理する分散環境を前提に設計されており、データを複数ノードに分散して記録するシャーディングを自動的に実行する。そのため、アプリケーション側で対象を意識する必要がなく、データの一貫性も強く確保され、処理中に古いデータが外部から参照されないようになっている。
データベース操作は、RDB のような SQL ではなく、Java API や RESTful API などの形式で提供される API をアプリケーションから呼び出して行う。Apache Hadoop の MapReduce など、ビッグデータの大規模分散処理に適している。
HBase は SQL データベースを置き換えるソリューションではないが、Apache Phoenix のようなソフトウェアを使って SQL レイヤーを追加できる。SQL レイヤーを追加すると、JDBC ドライバなどを使い、さまざまな分析作業を慣れた方法で簡単に処理できる。
HBase の歴史
| 年 | イベント |
|---|---|
| 2006年11月 | Google が BigTable の論文を発表した。 |
| 2007年2月 | 初期 HBase プロトタイプが Hadoop へのコントリビューションとして作成された。 |
| 2007年10月 | Hadoop 0.15.0 とともに利用可能な最初の HBase がリリースされた。 |
| 2008年1月 | HBase は Hadoop のサブプロジェクトになった。 |
| 2008年10月 | HBase 0.18.1 がリリースされた。 |
| 2009年1月 | HBase 0.19.0 がリリースされた。 |
| 2009年9月 | HBase 0.20.0 がリリースされた。 |
| 2010年5月 | HBase は Apache トップレベルプロジェクトになった。 |
| 2010年6月 | 最初の開発者版である HBase 0.89.20100621 がリリースされた。 |
| 2011年1月 | HBase 0.90.0 がリリースされた。 |
| 2011年半ば | HBase 0.92.0 がリリースされた。 |
HBase の特徴
Apache HBase の重要な特徴をいくつか示す。
分散 (Distributed)
Apache HBase は、疑似分散 (Pseudo-distributed) モードと完全分散 (Fully distributed) モードの 2 つのモードで実行できる。疑似分散モードはテスト目的で使用され、単一ノードで実行される。一方、完全分散モードは本番環境で使用され、ノードクラスタ上で実行される。
ビッグデータストア
Apache HBase は、数十億行と数百万または数十億カラムを持つテーブルに非常に大きなデータを保存できるように設計されている。Hadoop HDFS 上で実行されるため、低レイテンシでデータに対するリアルタイムの読み書きが可能である。テーブルに保存された膨大なデータの読み取り処理に対して、より良い性能を提供する。
非リレーショナル (Non-Relational)
すでに述べたように、Apache HBase は非リレーショナルデータベースであるため、リレーショナルデータベースモデルには従わない。リレーショナルデータベース管理では、データは行と列の形でテーブルに保存される。そのデータへアクセスするには SQL 言語を使用できるが、Apache HBase の場合、データストレージは固定形式ではなく、独自のストレージおよびクエリメカニズムを使用する。Apache HBase ではスキーマは柔軟であり、要件に応じて拡張できる。
柔軟なデータモデル
Apache HBase は、テーブルにデータを保存できる柔軟なデータモデルを提供する。テーブルには 1 つ以上の column family がある。ユーザーのデータは、key/value ペアの集合である row に保存される。テーブル内の row は row key によって一意に識別される。
拡張可能 (Scalable)
Apache HBase の Region は、行が Region ごとに分散されるため水平スケールが可能である。テーブルは複数の Region に保存でき、Region が非常に大きくなると、同じ中央の row key を基準にデータが 2 つの Region に分割される。
HBase の機能
Apache HBase の機能は次のとおりである。
- 線形およびモジュール式のスケーラビリティをサポートする。
- 読み取りと書き込みの厳密な一貫性を提供する。
- 自動かつ設定可能なテーブルシャーディングを提供する。
- RegionServer 間の自動 failover をサポートする。
- Apache HBase テーブルで Hadoop MapReduce ジョブをサポートするための便利な基本クラスを提供する。
- クライアントアクセスのために Java API を簡単に利用できる。
- リアルタイムクエリのためのブロックキャッシュと Bloom filter を提供する。
- サーバーサイドフィルタを通じてクエリ述語プッシュダウンを提供する。
- 拡張可能な JRuby ベース (JIRB) シェルを提供する。
HBase の長所と短所
HBase の長所
- 大容量データを安定して扱うのに効果的である。
- 中央で分散システム全体を制御する Master を置き、全体データの一貫性を管理することで、複製データ間の一貫性を保証する。
- 大量データの分析処理支援に適している。
- MapReduce の input として使いやすい。
- HDFS、MapReduce などと一緒に使用するのに最適化されている。
- 性能問題が発生した場合、Region server を追加するだけで性能を維持できる。
- failover が容易で管理しやすい。
HBase の短所
- MapReduce の input として使いやすいが、同時にファイル input と一緒に使用すると CPU 使用率が高くなり、Region server が容易に down する。
- 適切な HBase setting のための条件に関する資料はあるが、Cluster の規模や基本 Spec が異なるため、そのまま適用するのは難しい。
- 特定 Region server に特定 table の Region が集中しやすく、性能低下につながる。
- 構成時には HBase の適切な設計が必要である。
RDBMS と HBase の違い
リレーショナルデータベースと HBase の主な違いを見てみる。
| RDBMS | HBase |
|---|---|
| テーブルをデータベースとして使用する。 | Region をデータベースとして使用する。 |
| サポートされるファイルシステムは FAT、NTFS、EXT である。 | サポートされるファイルシステムは HDFS である。 |
| コミットログを使用してログを保存する。 | WAL (Write-Ahead Logs) を使用してログを保存する。 |
| 使用される参照システムは coordinate system である。 | ZooKeeper で使用される参照システムである。 |
| Primary key を使用する。 | Row key を使用する。 |
| Partitioning がサポートされる。 | Sharding がサポートされる。 |
| Row、Column、Cell を使用する。 | Row、Column family、Column、Cell を使用する。 |
HDFS と HBase の違い
HDFS と HBase の主な違いを見てみる。
| HDFS | HBase |
|---|---|
| HDFS は分散保存のためのファイルシステムを提供する。 | HBase はテーブル形式のカラムベースデータストレージを提供する。 |
| HDFS は大容量ファイルに最適化されたストレージを提供する。 | HBase はテーブル形式データに対する最適化を提供する。 |
| フラットファイルを使用する。 | key-value ペアのデータを使用する。 |
| データモデルは柔軟ではない。 | 柔軟なデータモデルを提供する。 |
| ファイルシステムと処理フレームワークを使用する。 | Hadoop MapReduce サポートを内蔵したテーブル形式ストレージを使用する。 |
| ほとんど write-once-read-many に最適化されている。 | 多くの読み書きの両方に最適化されている。 |
行指向データストアとカラム指向データストアの違い
行指向 (Row-oriented) データストアとカラム指向 (Column-oriented) データストアの主な違いを見てみる。
| 行指向データストア | カラム指向データストア |
|---|---|
| 行指向データストアはレコードの追加/修正に効率的である。 | カラム指向データストアはデータ読み取りに効率的である。 |
| 行全体を含むページを読み取る。 | 必要なカラムだけを読み取る。 |
| OLTP システムに最も適している。 | まだ OLTP システムには適していない。 |
| 行全体の値をシリアライズする。 | カラム全体の値をシリアライズする。 |
| メモリの連続ページに行を保存する。 | ページのカラムをメモリに保存する。 |
OLTP (Online Transactional Processing) とは、オンライントランザクション処理を意味し、ネットワーク上のオンラインユーザーによる Database に対する一括トランザクション処理を指す。
カラム指向データベースの長所と短所
カラム指向データベースの長所と短所を見てみる。
長所
- 効率性およびデータ圧縮に対するサポート機能が組み込まれている。
- 高速なデータ検索をサポートする。
- カラム指向データベースでは管理と構成が単純化される。
- COUNT、SUM、AVG、MIN、MAX などの集計クエリに対する高性能に適している。
- より大きな Region をより小さな Region に分配する自動シャーディングメカニズムを提供するため、partitioning に効率的である。
短所
- 複数テーブルの JOIN クエリおよびデータが最適化されていない。
- 頻繁な削除と更新のために partition を作成する必要があり、ストレージ効率が低下する。
- 非リレーショナルな特性上、partition と index の設計が非常に難しい。
HBase のユースケース
- データ一貫性を保証するため、または分析などの用途で使用する。
- 例: Facebook、eBay、Adobe、LINE など。
- 監視システム (Monitoring system)。
- ユーザー操作の追跡 (Tracking user actions)。
- 監査ログシステム (Audit logging systems)。
- リアルタイム分析 (Real-time analytics)。
- Hadoop を使用して大量データを分析する必要がある場合。
- 大規模 SNS サービスのメインストレージとして利用。
- メッセージ中心システム (Twitter に似たメッセージおよびステータス)。
- HBase からコンテンツを提供するコンテンツ管理システム。
- Web クローリング中の Web ページ保存のような標準的なユースケース。