きゃまなかのブログ

新卒6年目の WEB エンジニアです。 Ruby on Rails の TIPS を中心にブログ書いてます。 去年まで運用・保守のエンジニアだったので、サーバサイドの記事もたまに書きます。 よろしくお願いします。

【備忘録】HBase とは?HBase の構成とデータ構造について!

概要

新しく HBase を扱うサーバの担当になりました。

IT 業界ではデータ利活用の分野が活発になっており、ビッグデータを安全かつ高速に扱える HBase のようなプラットフォームは今後ますます注目されると思います。

しかし、自分は HBase について全く知識が無いので、今回 HBase について調べて、重要だと思う点を忘れないようにまとめました。

HBase とは?

HBase とは Google のほとんどのサービスを支える基盤である BigTable を元に設計されたオープンソースソフトウェア (OSS) です。

NoSQL の一つであり、Hadoop の分散ファイルシステムである HDFS 上で動作する列指向型の分散データベースです。 

低レイテンシーでデータの読み書きを行うことに優れており、強い一貫性を保証してくれます。

ネットワーク障害が発生した場合でも、通信可能なサーバだけでシステムを稼働し続けることができる耐性を持っています。(ただし処理性能が落ちる可能性あり)

構成

HBase は Master サーバと Region サーバの 2 種類のサーバで構成されており、Region サーバを増設することで簡単にスケールアウト出来る仕組みとなっています。

HBase のデータはリージョンと呼ばれる単位で分割されており、リージョンの扱い方でサーバの種類が分けられます。

Master サーバ

HBase の全データ(リージョン)がどの Region サーバに保存されているかメタ情報を管理しているサーバです。

Region サーバへのリージョンの割り当てや、Region サーバの障害検知も行います。

ちなみにこれらの仕事は Master サーバ内で動いている ZooKeeper と言うソフトウェアが担当しています。

ZooKeeper は HBase 以外にも多くの分散アプリケーションで利用されているソフトウェアです。

Region サーバ

Master サーバから割り当てられたリージョンを保存しているサーバです。

クライアントはまず Master サーバ(正確には ZooKeeper)に問い合わせをして、対象のデータ(リージョン)を保存している Region サーバの位置を教えてもらいます。

その後、その Region サーバがクライアントからのリクエストを担当します。

リージョンは必ず単一の Region サーバで管理されており、読み書きを行うためデータの一貫性が保たれます。

Region サーバがダウンした場合は、割り当てられていたリージョンは他の Region サーバにフェールオーバーされます。(この作業は Master サーバが行う)

ただし、フェールオーバーが完了するまで、クライアントは対象リージョンへの読み書きを行うことができません。

データ構造

HBase のテーブルには型がなく、バイト配列(byte[ ])で格納されています。

HBase の行は一意な行キーで昇順にソートされており、テーブルの値を読み書きする際にはこの行キーを介して行います。

前述しましたが、HBase で管理するデータは一定範囲毎にリージョンと言う単位で分割されており、テーブルには複数のリージョンが存在します。

また、HBase の列も列ファミリと言う単位でグループ化されています。

テーブルのデータはリージョン毎に分割されて、更に列ファミリ毎に分割されてファイルに吐き出されます。

ファイルは別でも同じリージョンであれば、同じ Region サーバに保存されます。

f:id:kyamanak83:20180324162702p:plain

HBase のデータ(セルの値)にはそれぞれタイムスタンプが付与されており、バージョンを管理しています。

ファイルには以下のようなフォーマットで保存されます。

行(行キー):列ファミリ:列:タイムスタンプ:値

まとめ

HBase 初心者の自分が、HBase の概要や構成など基本的な部分を調べて、重要だと思う点をまとめました。

今後、導入や運用を開始して思うことがあれば追記したいと思います。

自分と同じ HBase 初心者がこの記事を読んで、なんとなく HBase について理解して頂けたら幸いです。