きゃまなかのブログ

新卒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 では書き込みを行う際に、まず初めに Region サーバの MemStore 上にデータを書き込みます。

MemStore とは Region サーバのメモリー領域であり、キャッシュのような働きをします。

そして MemStore のデータが一定量溜まったところでディスク上に HFile としてデータを吐き出し永続化します。

ただし、HFile に吐き出す前のデータはサーバのメモリ上 (MemStore) に格納されているため、サーバがダウンすると消えてしまいます。

そのため、HBase では HLog と言うデータを書き込む際のログを残しており、サーバがダウンした際には HLog を元にデータを復旧出来るようになっています。

 

まとめ

HBase 初心者の自分が、HBase を一通り調べて重要だと思う点をまとめました。

基本的なことしか書いていないので、これから開発・運用をしていく中で知らない事に沢山出会うと思っています。

HBase には独自の用語が多く、それを知っていないと話について行けないと思いました。

会社のメンバーはオライリーの HBase の本を読んで勉強しているので、一応紹介しておきます。

 

ちなみに、自分はまだ読んでませんw