HBaseアーキテクチャ
私の以前のブログで HBaseチュートリアル 、HBaseとその機能について説明しました。また、Facebookメッセンジャーのケーススタディについても触れました。今、私たちのさらなる前進 、HBaseとHBaseアーキテクチャのデータモデルについて説明します。先に進む前に、HBaseが重要な概念であり、その不可欠な部分を構成していることも知っておく必要があります。 ビッグデータHadoop認定用。
このHBaseアーキテクチャブログで取り上げる重要なトピックは次のとおりです。
まず、HBaseのデータモデルを理解しましょう。これは、HBaseの読み取り/書き込みと検索を高速化するのに役立ちます。
HBaseアーキテクチャ:HBaseデータモデル
ご存知のとおり、HBaseは列指向のNoSQLデータベースです。行と列を含むリレーショナルデータベースに似ていますが、リレーショナルデータベースではありません。リレーショナルデータベースは行指向ですが、HBaseは列指向です。したがって、最初に列指向データベースと行指向データベースの違いを理解しましょう。
doubleからintjavaに変換します
行指向データベースと列指向データベース:
- 行指向データベースは、テーブルレコードを一連の行に格納します。一方、列指向データベーステーブルレコードを一連の列に保存します。つまり、列のエントリはディスク上の連続した場所に保存されます。
それをよりよく理解するために、例を見て、以下の表を考えてみましょう。
このテーブルが行指向のデータベースに格納されている場合。以下に示すようにレコードが保存されます。
1、ポールウォーカー、我ら、231、ガラント、
2、 ヴィンディーゼル、ブラジル、520、マスタング
行指向のデータベースでは、上記のように、データは行またはタプルに基づいて格納されます。
列指向データベースはこのデータを次のように格納しますが、
1、2、 ポールウォーカー、ヴィンディーゼル、 我ら、ブラジル、 231、520、 ガラント、マスタング
列指向データベースでは、最初の列の値が一緒に格納されるように、すべての列の値が一緒に格納され、次に2番目の列の値が一緒に格納され、他の列のデータも同様の方法で格納されます。
- ペタバイトやエクサバイトのようにデータ量が非常に多い場合は、単一の列のデータが一緒に格納され、より高速にアクセスできるため、列指向のアプローチを使用します。
- 行指向のアプローチは比較的少ない数の行と列を効率的に処理しますが、行指向のデータベースはデータを格納するため、構造化された形式です。
- 半構造化データまたは非構造化データの大規模なセットを処理および分析する必要がある場合は、列指向のアプローチを使用します。を扱うアプリケーションなど オンライン分析処理 データマイニング、データウェアハウジング、分析を含むアプリケーションなど。
- 一方、 オンライントランザクション処理 構造化データを処理し、トランザクションプロパティ(ACIDプロパティ)を必要とする銀行や金融のドメインなどは、行指向のアプローチを使用します。
HBaseテーブルには、次の画像に示す次のコンポーネントがあります。
- テーブル :データはHBaseにテーブル形式で保存されます。ただし、ここではテーブルは列指向の形式です。
- 行 キー :行キーは、検索を高速化するレコードの検索に使用されます。あなたはその方法を知りたいと思いますか?これについては、このブログで先に進むアーキテクチャの部分で説明します。
- カラム 家族 :さまざまな列が列ファミリーに結合されています。これらの列ファミリーは一緒に保存され、同じ列ファミリーに属するデータに1回のシークで一緒にアクセスできるため、検索プロセスが高速になります。
- カラム 修飾子 :各列の名前は、その列修飾子と呼ばれます。
- 細胞 :データはセルに保存されます。データは、行キーと列の修飾子によって明確に識別されるセルにダンプされます。
- タイムスタンプ :タイムスタンプは、日付と時刻の組み合わせです。データが保存されるときはいつでも、タイムスタンプとともに保存されます。これにより、特定のバージョンのデータを簡単に検索できます。
より単純で理解しやすい方法で、HBaseは次のもので構成されていると言えます。
- テーブルのセット
- 列ファミリーと行を持つ各テーブル
- 行キーは、HBaseの主キーとして機能します。
- HBaseテーブルへのアクセスには、この主キーが使用されます
- HBaseに存在する各列修飾子は、セルに存在するオブジェクトに対応する属性を示します。
HBaseデータモデルについて理解したところで、このデータモデルがHBaseアーキテクチャとどのように一致し、大規模なストレージとより高速な処理に適しているかを見てみましょう。
HBaseアーキテクチャー:HBaseアーキテクチャーのコンポーネント
HBaseには3つの主要なコンポーネントがあります。 HMasterサーバー 、 HBaseリージョンサーバー、リージョン そして Zookeeper 。
次の図は、HBaseアーキテクチャの階層を説明しています。それぞれについて個別に説明します。
HMasterに進む前に、これらすべてのサーバー(HMaster、Region Server、Zookeeper)がリージョンを調整および管理し、リージョン内でさまざまな操作を実行するように配置されているため、リージョンについて理解します。では、地域とは何か、なぜそれらがそれほど重要なのかを知りたいと思うでしょう。
HBaseアーキテクチャ: 領域
リージョンには、そのリージョンに割り当てられた開始キーと終了キーの間のすべての行が含まれます。 HBaseテーブルは、列ファミリーのすべての列が1つの領域に格納されるように、いくつかの領域に分割できます。各リージョンには、ソートされた順序で行が含まれています。
多くの地域がに割り当てられています リージョンサーバー は、そのリージョンのセットに対する読み取りおよび書き込み操作の処理、管理、実行を担当します。
したがって、より簡単な方法で結論を下します。
- テーブルはいくつかのリージョンに分割できます。リージョンは、開始キーと終了キーの間にデータを格納する行のソートされた範囲です。
- リージョンのデフォルトサイズは256MBで、必要に応じて構成できます。
- リージョンのグループは、リージョンサーバーによってクライアントに提供されます。
- リージョンサーバーは、クライアントに約1000のリージョンを提供できます。
ここで、階層の最上位から始めて、最初に、のNameNodeと同様に機能するHMasterサーバーについて説明します。 HDFS 。次に、階層を下に移動して、ZooKeeperとRegionServerについて説明します。
HBaseアーキテクチャ: Hマスター
次の画像のように、HMasterがDataNodeにあるRegionServerのコレクションを処理していることがわかります。 HMasterがそれをどのように行うかを理解しましょう。
- HBase HMasterは、DDL操作(テーブルの作成と削除)を実行し、上の画像に示すように、リージョンサーバーにリージョンを割り当てます。
- リージョンサーバーを調整および管理します(NameNodeがHDFSでDataNodeを管理するのと同様です)。
- 起動時にリージョンサーバーにリージョンを割り当て、リカバリと負荷分散中にリージョンサーバーにリージョンを再割り当てします。
- クラスタ内のすべてのRegionServerのインスタンスを(Zookeeperの助けを借りて)監視し、RegionServerがダウンするたびにリカバリアクティビティを実行します。
- テーブルを作成、削除、更新するためのインターフェースを提供します。
HBaseには分散型の巨大な環境があり、HMasterだけではすべてを管理するのに十分ではありません。では、HMasterがこの巨大な環境を管理するのに何が役立つのか疑問に思われるでしょうか。そこでZooKeeperが登場します。 HMasterがHBase環境を管理する方法を理解した後、ZookeeperがHMasterが環境を管理するのにどのように役立つかを理解します。
HBaseアーキテクチャ: ZooKeeper –コーディネーター
以下の画像は、ZooKeeperの調整メカニズムを説明しています。
- Zookeeperは、HBase分散環境内のコーディネーターのように機能します。セッションを介して通信することにより、クラスター内のサーバーの状態を維持するのに役立ちます。
- すべてのRegionServerとHMasterServerは、一定の間隔で継続的なハートビートをZookeeperに送信し、上の画像に示されているように、どのサーバーが稼働していて使用可能かを確認します。また、サーバー障害通知を提供するため、回復手段を実行できます。
- 上の画像を参照すると、アクティブサーバーのバックアップとして機能する非アクティブサーバーがあります。アクティブなサーバーに障害が発生した場合、それは救助のために来ます。
- アクティブなHMasterはハートビートをZookeeperに送信し、非アクティブなHMasterはアクティブなHMasterから送信された通知をリッスンします。アクティブなHMasterがハートビートの送信に失敗した場合、セッションは削除され、非アクティブなHMasterがアクティブになります。
- リージョンサーバーがハートビートの送信に失敗した場合、セッションは期限切れになり、すべてのリスナーに通知されます。次に、HMasterは適切な回復アクションを実行します。これについては、このブログの後半で説明します。
- Zookeeperは、.METAサーバーのパスも維持します。これは、クライアントが任意の地域を検索するのに役立ちます。クライアントはまず、リージョンが属するリージョンサーバーを.METAサーバーに確認する必要があり、そのリージョンサーバーのパスを取得します。
.METAサーバーについてお話ししたので、最初に.METAサーバーとは何ですか?したがって、ZooKeeperと.METAサーバーの作業を簡単に関連付けることができます。後で、このブログでHBase検索メカニズムについて説明するときに、これら2つがどのように連携して機能するかについて説明します。
HBaseアーキテクチャ: メタテーブル
- METAテーブルは、特別なHBaseカタログテーブルです。すべてのリージョンサーバーのリストを維持します 上の画像でわかるように、HBaseストレージシステムで。
- あなたが見ることができる図を見て、 .META ファイルは、キーと値の形式でテーブルを維持します。キーはリージョンの開始キーとそのIDを表し、値にはリージョンサーバーのパスが含まれます。
すでに説明したように、Regionについて説明していたときに、Region Serverとその機能について説明しました。次に、階層を下に移動し、RegionServerのコンポーネントとその機能に焦点を当てます。後で、検索、読み取り、書き込みのメカニズムについて説明し、これらすべてのコンポーネントがどのように連携するかを理解します。
HBaseアーキテクチャ: リージョンサーバーのコンポーネント
以下の画像は、リージョンサーバーのコンポーネントを示しています。それでは、個別に説明します。
リージョンサーバーは、上部で実行されているさまざまなリージョンを維持します 。リージョンサーバーのコンポーネントは次のとおりです。
- WAL: 上の画像から結論できるように、ログ先行書き込み(WAL)は、分散環境内のすべてのリージョンサーバーに添付されたファイルです。 WALは、永続ストレージまたは永続ストレージにコミットされていない新しいデータを保存します。データセットの回復に失敗した場合に使用されます。
- ブロックキャッシュ: 上の画像から、BlockCacheがRegionServerの上部にあることがはっきりとわかります。頻繁に読み取るデータをメモリに保存します。 BlockCache内のデータが最も最近使用されていない場合、そのデータはBlockCacheから削除されます。
- MemStore: 書き込みキャッシュです。ディスクまたは永続メモリにコミットする前に、すべての受信データを保存します。リージョン内の列ファミリーごとに1つのMemStoreがあります。画像でわかるように、各リージョンには複数の列ファミリーが含まれているため、リージョンには複数のMemStoreがあります。データは、ディスクにコミットする前に辞書式順序で並べ替えられます。
- HFile: 上の図から、HFileがHDFSに保存されていることがわかります。したがって、実際のセルをディスクに保存します。 MemStoreのサイズがを超えると、MemStoreはデータをHFileにコミットします。
HBaseアーキテクチャのメジャーコンポーネントとマイナーコンポーネントがわかったので、このメカニズムとその共同作業について説明します。読み取りでも書き込みでも、最初にファイルを読み取る場所または書き込む場所を検索する必要があります。それでは、この検索プロセスを理解しましょう。これは、HBaseを非常に人気のあるメカニズムの1つです。
HBaseアーキテクチャ: 検索はHBaseでどのように初期化されますか?
ご存知のように、ZookeeperはMETAテーブルの場所を保存します。クライアントが読み取りまたは書き込み要求でHBaseに近づくと、次の操作が発生します。
- クライアントは、ZooKeeperからMETAテーブルの場所を取得します。
- 次に、クライアントは、METAテーブルから対応する行キーのリージョンサーバーの場所を要求して、それにアクセスします。クライアントは、この情報をMETAテーブルの場所とともにキャッシュします。
- 次に、対応するリージョンサーバーから要求することにより、行の場所を取得します。
今後の参照のために、クライアントはキャッシュを使用してMETAテーブルの場所を取得し、以前に行キーのリージョンサーバーを読み取りました。その後、領域がシフトまたは移動されたためにミスが発生するまで、クライアントはMETAテーブルを参照しません。次に、METAサーバーに再度要求し、キャッシュを更新します。
いつものように、クライアントはMETAサーバーからRegion Serverの場所を取得するのに時間を無駄にしないため、時間を節約し、検索プロセスを高速化します。それでは、HBaseで書き込みがどのように行われるかを説明します。それに関与するコンポーネントは何ですか?それらはどのように関与していますか?
C ++の名前空間
HBaseアーキテクチャ: HBase書き込み 機構
以下の画像は、HBaseの書き込みメカニズムを説明しています。
書き込みメカニズムは、次のプロセスを順番に実行します(上の画像を参照)。
ステップ1: クライアントが書き込み要求を持っているときはいつでも、クライアントはデータをWAL(先行書き込みログ)に書き込みます。
- 編集内容は、WALファイルの最後に追加されます。
- このWALファイルはすべてのRegionServerで維持され、RegionServerはそれを使用してディスクにコミットされていないデータを回復します。
ステップ2: データがWALに書き込まれると、MemStoreにコピーされます。
ステップ3: データがMemStoreに配置されると、クライアントは確認応答を受信します。
ステップ4: MemStoreがしきい値に達すると、データをHFileにダンプまたはコミットします。
それでは、深く掘り下げて、MemStoreが書き込みプロセスにどのように貢献しているか、そしてその機能は何であるかを理解しましょう。
HBase書き込み 機構- MemStore
- MemStoreは、ソートされたKeyValueとして、辞書式順序で(順次辞書式順序で)格納されているデータを常に更新します。列ファミリーごとに1つのMemStoreがあるため、更新は列ファミリーごとにソートされた方法で保存されます。
- MemStoreがしきい値に達すると、すべてのデータが並べ替えられた方法で新しいHFileにダンプされます。このHFileはHDFSに保存されます。 HBaseには、列ファミリーごとに複数のHFileが含まれています。
- 時間の経過とともに、MemStoreがデータをダンプするにつれて、HFileの数は増加します。
- MemStoreは最後に書き込まれたシーケンス番号も保存するため、Master ServerとMemStoreはどちらも、これまでに何がコミットされ、どこから開始するかを認識しています。リージョンが起動すると、最後のシーケンス番号が読み取られ、その番号から新しい編集が開始されます。
何度か説明したように、そのHFileはHBaseアーキテクチャの主要な永続ストレージです。最後に、すべてのデータがHBaseの永続ストレージであるHFileにコミットされます。したがって、読み取りおよび書き込み中の検索を高速化するHFileのプロパティを見てみましょう。
HBaseアーキテクチャ: HBase書き込み 機構- HFile
- 書き込みはディスクに順番に配置されます。したがって、ディスクの読み取り/書き込みヘッドの動きは非常に少なくなります。これにより、書き込みと検索のメカニズムが非常に高速になります。
- HFileインデックスは、HFileが開かれるたびにメモリにロードされます。これは、1回のシークでレコードを見つけるのに役立ちます。
- トレーラーは、HFileのメタブロックを指すポインターです。コミットされたファイルの最後に書き込まれます。タイムスタンプとブルームフィルターに関する情報が含まれています。
- ブルームフィルターは、キーと値のペアの検索に役立ち、必要な行キーを含まないファイルをスキップします。タイムスタンプは、ファイルのバージョンの検索にも役立ち、データのスキップにも役立ちます。
書き込みメカニズムと、書き込みと検索を高速化するためのさまざまなコンポーネントの役割を理解した後。読み取りメカニズムがHBaseアーキテクチャ内でどのように機能するかを説明しますか?次に、圧縮、領域分割、リカバリなど、HBaseのパフォーマンスを向上させるメカニズムに移ります。
HBaseアーキテクチャ: 読み取りメカニズム
検索メカニズムで説明したように、クライアントがキャッシュメモリにリージョンサーバーを持っていない場合、最初にクライアントは.METAサーバーからリージョンサーバーの場所を取得します。次に、次のように一連の手順を実行します。
- データを読み取るために、スキャナーは最初にブロックキャッシュ内の行セルを探します。ここには、最近読み取られたすべてのキーと値のペアが格納されます。
- Scannerが必要な結果を見つけられなかった場合、これが書き込みキャッシュメモリであることがわかっているため、MemStoreに移動します。そこで、HFileにまだダンプされていない、最近書き込まれたファイルを検索します。
- 最後に、ブルームフィルターとブロックキャッシュを使用して、HFileからデータをロードします。
これまで、HBaseの検索、読み取り、書き込みのメカニズムについて説明してきました。次に、HBaseでの検索、読み取り、書き込みを高速化するHBaseメカニズムについて説明します。まず、理解します 圧縮 、これらのメカニズムの1つです。
HBaseアーキテクチャ: 圧縮
HBase HFilesを組み合わせてストレージを削減し、読み取りに必要なディスクシークの数を削減します。このプロセスは 圧縮 。 Compactionは、リージョンからいくつかのHFileを選択し、それらを結合します。上の画像でわかるように、圧縮には2つのタイプがあります。
- マイナーコンパクション :上の画像に示すように、HBaseは自動的に小さいHFileを選択し、それらを大きいHFileに再コミットします。これはマイナーコンパクションと呼ばれます。小さいHFileを大きいHFileにコミットするためのマージソートを実行します。これは、ストレージスペースの最適化に役立ちます。
- 主要な圧縮: 上の画像に示されているように、メジャーコンパクションでは、HBaseはリージョンの小さいHFileをマージして新しいHFileに再コミットします。このプロセスでは、同じ列ファミリーが新しいHFileに一緒に配置されます。このプロセスで、削除されて期限切れになったセルを削除します。読み取りパフォーマンスが向上します。
ただし、このプロセス中に、入出力ディスクとネットワークトラフィックが混雑する可能性があります。これはとして知られています ライトアンプリフィケーション 。そのため、通常、ピーク負荷の低いタイミングでスケジュールされます。
ここで説明するもう1つのパフォーマンス最適化プロセスは リージョン分割 。これは、負荷分散にとって非常に重要です。
HBaseアーキテクチャ: リージョン分割
次の図は、リージョン分割メカニズムを示しています。
上図に示すように、領域が大きくなると、2つの子領域に分割されます。各リージョンは、親リージョンのちょうど半分を表します。次に、この分割はHMasterに報告されます。これは、HMasterが負荷分散のために新しいリージョンサーバーに割り当てるまで、同じリージョンサーバーによって処理されます。
最後になりましたが、大事なことを言い忘れましたが、HBaseが障害後にデータを回復する方法を説明します。私たちが知っているように 障害回復 はHBaseの非常に重要な機能です。したがって、HBaseが障害後にデータを回復する方法を教えてください。
HBaseアーキテクチャ: HBaseのクラッシュとデータ復旧
- リージョンサーバーに障害が発生すると、ZooKeeperはHMasterに障害について通知します。
- 次に、HMasterは、クラッシュしたリージョンサーバーのリージョンを多くのアクティブなリージョンサーバーに配布して割り当てます。障害が発生したリージョンサーバーのMemStoreのデータを回復するために、HMasterはWALをすべてのリージョンサーバーに配布します。
- 各リージョンサーバーはWALを再実行して、失敗したリージョンの列ファミリーのMemStoreを構築します。
- データは、WALに時系列で(タイムリーな順序で)書き込まれます。したがって、そのWALを再実行するということは、MemStoreファイルに加えられて保存されたすべての変更を行うことを意味します。
- したがって、すべてのリージョンサーバーがWALを実行した後、すべての列ファミリーのMemStoreデータが復元されます。
このブログが、HBaseデータモデルとHBaseアーキテクチャを過小評価するのに役立つことを願っています。楽しんでください。これで、HBaseの機能に関連することができます(以前に説明しました) HBaseチュートリアル ブログ)HBaseアーキテクチャを使用して、内部でどのように機能するかを理解します。 HBaseの理論的な部分がわかったので、実際的な部分に移る必要があります。これを念頭に置いて、次のブログ サンプルを説明します HBase POC 。
HBaseアーキテクチャを理解したので、 25万人以上の満足した学習者のネットワークを持つ信頼できるオンライン学習会社であるEdurekaが世界中に広がっています。 EdurekaビッグデータHadoop認定トレーニングコースは、小売、ソーシャルメディア、航空、観光、金融の各ドメインでリアルタイムのユースケースを使用して、学習者がHDFS、Yarn、MapReduce、Pig、Hive、HBase、Oozie、Flume、Sqoopのエキスパートになるのに役立ちます。
質問がありますか?コメント欄にご記入ください。折り返しご連絡いたします。