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 ドライバなどを使い、さまざまな分析作業を慣れた方法で簡単に処理できる。

Apache HBase|GitHub

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 ページ保存のような標準的なユースケース。

参考資料