第4章 - HBaseの分散データベース
記事のディレクトリ
HBaseのプロフィール
Bigtableでは、アプリケーションの広い範囲で、機械のPBレベルデータと数千に拡張することができる基礎となるデータ・ストレージとしてGoogle GFS分散ファイルシステムを使用して大量のデータを処理するためのモデルを計算する分散並列のMapReduceを用いた分散ストレージシステムでありますスケーラビリティ、パフォーマンスおよび可用性の特性。
HBaseのは、信頼性の高い、高性能、列指向、分散データベーススケーラブル、GoogleのBigTableののオープンソースの実装は、主に非構造化および半構造ストアバルクデータに使用されます。HBaseの目標は非常に大きなテーブルに対処することです、あなたが途中で水平展開することができ、プロセスデータテーブルへのコンピュータの低コストのクラスターの使用は以上10億データの行と数百万の要素で構成されています。
- MapReduceはHBaseの、ハイ・パフォーマンス・コンピューティングで大量のデータを使用します
- 安価なクラスタを使用して、信頼性の高い根本的なストレージを使用して、HDFSは、大容量データ記憶能力を提供します
- 安定性とエラー復旧サービスを実現するために、コラボレーションサービスを提供するために使用する飼育係
- RDBMSのデータインポート機能のHBaseのための効率的で便利な提供Sqoop
- ピップとハイブは、高レベルの言語サポートを提供します
従来のリレーショナルデータベースとHBaseの違い
従来のリレーショナルデータベース | HBaseの | |
---|---|---|
データの種類 | リレーショナルモデルを使用して、データ型とストレージの富を持っています | よりシンプルなデータモデルを使用して、データが原因不明の文字列として保存されている、あなたは文字列を解析するために、独自のプログラムを書く必要があります |
データ操作 | これは、操作が豊富に含まれ、複雑なマルチテーブルを含んでなる合流します | テーブルとテーブルの間の複雑な関係が存在しない、単純な挿入、検索、削除、空などは、達成することができないのクエリテーブルとテーブルを結合 |
ストレージモード | オンラインモード記憶 | ストレージ列に基づいて、異なるファイルの列グループが分離されています。あなたは、I / Oのオーバーヘッドを削減し、同時ユーザークエリの大きな数をサポートすることができます |
データのインデックス | 一般的には、データアクセスのパフォーマンスを改善するために、異なる列のための複雑な複数のインデックスを構築することができます | 一つの指標のみ - ラインキー、HBaseの中のすべてのアクセス方法、またはラインキーにアクセスすることにより、またはラインキーをスキャンすることにより、 |
データ保守 | 更新操作は、最新の電流値を元の値で古いレコードを置き換えるために、古い値がない存在の後に上書きされます | 場合は、更新操作、およびデータの古いバージョンを削除しますが、新しいバージョンを発生しませんが、古いバージョンはまだ保持されています |
スケーラビリティ | 横方向の広がり、比較的限られた空間の長手方向の延長を達成することは困難 | スケーラブルなパフォーマンスは、クラスタ内のハードウェアの量を増加または減少させることによって達成することができます |
HBaseのも独自の制限があり、このような取引はサポートされていないため、銀行間の原子性を達成することはできません。
HBaseのデータモデル
概念データモデル
HBaseのがまばらである、多次元、ソートマッピングテーブルの、このテーブルは、インデックス付き行キー、カラムファミリー、およびタイムスタンプ列修飾子です。各値は、未解釈の文字列、なしのデータ型です。ユーザデータはテーブルに格納され、各行は、キーの行がソートされ、任意の数の列ことができました。
カラムからなる群の一つ以上によって水平方向にテーブル、列ファミリーは、任意の数の列、データを一緒に格納されている同じファミリーの列を含むことができます。カラムファミリを延びる支持体は、容易に事前定義された数と列の種類なしで、行または列ファミリーを追加することができ、すべての列が文字列として格納され、ユーザが独自のデータ型変換を実行する必要があります。HBaseのは、更新操作を実行し、データの古いバージョンを削除しませんが、新バージョンで、古いバージョンの遺骨を生成するとき。
HBaseのデータ・モデルの概念
コンセプト | 説明 |
---|---|
テーブル | HBaseのデータテーブルを編成するために用いられる、テーブルは、行と列で構成され、列が複数の列に分割されているグループ |
行 | HBaseの各テーブルは、行の数で構成され、各行は、行キー(行キー)により識別されます |
列の家族 | HBaseのテーブルは、基本的なアクセス制御部である多くの「列グループ」(カラムファミリー)のコレクションにグループ化されています |
列の修飾子 | 列(または列)によって位置決め列クランデータ修飾子 |
セル | グループ「セル」(セル)を決定修飾子行、列と列でHBaseのテーブルに、データがセルデータ型に格納されていない、それは常にバイトのバイトの配列として扱われます[]。各セルは、異なるタイムスタンプに対応するデータの複数のバージョンを格納することができます。 |
タイムスタンプ | 各セルは、同じデータの複数のバージョンを保持し、これらのバージョンは、タイムスタンプを使用して索引付けされます。セルの異なるバージョンがタイムスタンプの降順に従って格納され、最新バージョンが最初に読むことができます |
HBaseのテーブル内の座標データを検索するために使用される、決定された行のキーと列グループする必要がタイムスタンプ列のセル修飾子と、従って、「四次元座標」、すなわちとみなすことができる[行キー、カラム基、コラム修飾子、タイムスタンプ]。
ボンド | 値 |
---|---|
[「201505003」、「情報」、「電子メール」、1174184619081] | 「[email protected]」 |
[「201505003」、「情報」、「電子メール」、1174184620720] | 「[email protected]」 |
概念図
HBaseの概念図では、テーブルは、スパース、多次元マッピング関係として見ることができます。ラインが各列グループ内のデータを格納するために必要としないが、各列は、同じ列グループを含んでいます。
これは、HBaseのテーブル保存しているページの断片です。
- 行キーは逆のURL(すなわちcom.cnn.www)で、なぜ店、HBaseのは、データを格納するために辞書のソート順のラインキーをベースとしているため、逆URLを経由して、あなたは同じサイトから行うことができますコンテンツデータは、行キーの値に応じて、水平分割の時に、あなたが同じパーティション(領域)に同じサイトから分割データを試みること、に隣接する位置に格納されています。
- 内容欄ファミリーは、Webコンテンツを格納するために使用されます。
- アンカーの列ファミリは、このページを参照するために任意のアンカーテキストのリンクが含まれています。
物理ビュー
概念図レベルでは、HBaseの各テーブルは、多くの行で構成され、物理的なストレージレベルでは、重要な違いのHBaseと従来のリレーショナル・データベースの列ベースのストレージの使用です。
物理ストレージは、HBaseのテーブルは、内容に応じて別々に格納されている上記の概念図は、アンカーこれら二つの列グループは、同じ列グループに属するデータは、一緒に保ちます。同じ時刻、およびタイムスタンプが格納された各列グループに、さらにキーの列を含みます。
概念図では、列の一部が空である、すなわち、これらの列の値は上方に存在しません。物理的な観点では、これらの空の列はヌルとして格納されていないが、これらの空のセルを要求したとき、記憶されない、ヌル値を戻します。
列指向ストレージ
ラインデータベースは、(N-aryのストレージモデル)ストレージ・モデル、タプル(または列)NSMを使用し、順次ディスクページに格納されています。ディスクからデータを読み出す場合には、順次ディスクから各タプルの内容全体をスキャンし、各タプルのクエリの所望の特性から選別が必要です。プロパティの各タプル値は、クエリのためにわずか数に有用である場合には、NSMは、ディスク容量とメモリ帯域幅を浪費することになります。
DSM(分解ストレージモデル)ストレージ・モデルを使用して列のデータベース、目的は、不必要なI / Oを最小限に抑えることです DSMは垂直の関係を分解し、その対応する属性が要求される場合に、各サブ属性関係、別々に格納されたそれぞれの子関係を割り当て、各親子関係のみアクセスされます。DSM欠陥は、以下のとおりです。高価な復興タプル検討の必要性接続作業を行うとき。
線データベースは、Oracle、MySQLおよびその他のリレーショナルデータベースにあるすべての行のデータベースと我々は通常馴染みの、こうしたオンライントランザクションデータ処理などのデータ、少量を処理するために主に適しています。
列のデータベースは主に(アドホッククエリ)を処理するアドホッククエリやバッチデータのために、それはユーザー同時クエリの大きな数をサポートするI / Oのオーバーヘッドを低減することが可能である、データ処理速度が100倍高速伝統的な方法よりもあります。柱状のデータベースは、主にデータマイニング、意思決定支援や地理情報システム、クエリ集約型システムのために使用されています。
原則HBaseの
HBaseの機能性成分
HBaseの実装では、三つの主要な機能コンポーネントで構成されています。
- ライブラリ機能:各クライアントへのリンク
- マスタープライマリサーバ
- 多くのサーバーリージョン
リージョンサーバーは、割り当てられた地域、ハンドル読むと、クライアントからの書き込み要求を格納し、維持する責任があります。
マスタープライマリサーバは、パーティションテーブル情報のHBase、メンテナンスリージョンリストサーバ、クラスタ領域を検出するために、サーバー、負荷分散の地域合理的な分布、ならびにそのような家族を作成するためのテーブルやカラムなどの治療パターンの変化を、管理し、維持する責任を負っています。
クライアントが直接Masterメインサーバーからデータを読み取ることはありませんが、地域の位置情報を取得した後、地域がサーバーから直接データを読み込みます。
テーブルと地域
HBaseの各テーブルは、テーブルの行は、辞書行キーの値に応じて維持されます。したがって、テーブルの行のパーティション内の行の値に応じて、分散ストレージ・キーの必要性は、各パーティションは「領域」と呼ばれ、ライン間隔を形成します。それは、すべてのデータが一定の範囲の間隔内に配置されて含まれている負荷分散やデータ配信の基本単位である、地域が異なるサーバーに配布されます。
各テーブルには、連続的なデータを挿入して、地域が領域に含まれる行の数が閾値に達したときに、増加していき、そのため自動的に二つの新しい領域に分割され、最初の領域を含みます。テーブルの行数の継続的な増加に伴い、それはより多くの地域を分割します。
別のマスターメインサーバは、異なるサーバー上のリージョンリージョンに割り当てられますが、同じ領域を複数のサーバに分割されていません。各地域に最適なサイズは、単一のサーバーに効果的に対処する能力に依存、それは一般的に1ギガバイト〜2GB以上を推奨します。各リージョンリージョンサーバーは、通常10〜1000リージョンのコレクションを管理する責任があります。
地域の場所
各領域は、各領域の位置が配置されて見つけるために、あなたはマッピングテーブルを構築することができ、その一意性を識別するためにRegionIDを持っています。マッピングテーブルの各行は、2つの要素、一つの領域識別子、領域識別子他のサーバを含み、このラインは地域地域とサーバとの間の対応関係を表します。このマップは、またとして知られ、「メタデータテーブル」として知られている「.META。表。」高速アクセスのため、.META。すべての領域テーブルはメモリに保存されています。
リージョンデータHBaseのテーブルが非常に大きい場合、.META。表には、複数の地域に分割されます。これらの地域を検索するには、すべてのメタデータの特定の場所を記録する新しいマッピングテーブルを構築することも知られているとして、「ルートデータシート」であり、「-ROOT-テーブル。」-ROOT-テーブルは常にストレージ-ROOT-テーブルのための1つの領域のみが存在し、分割することはできませんマスターサーバは常にその場所を知っている、地域の名前が死んで書かれています。
ユーザーデータへのクライアントアクセスする前に、あなたがアクセス飼育係に必要な、位置情報-ROOT-テーブルを取得し、その後、.METAため-ROOT-シートをご覧ください。情報テーブル、および、アクセス.META。表、地方が配置されている特定のを見つけますこれは地域サーバ、および最終的には地域のサーバーにデータを読み込みます。
アドレッシングのプロセスをスピードアップするために、彼らは通常、クライアント上にキャッシュされます、お問い合わせは、位置情報をキャッシュしていました。同じデータにアクセスするには、将来的にこのように、あなたは常に「三層のアドレス指定」のプロセスを経る必要がなく、クライアントのキャッシュから直接位置情報領域を取得することができます。
要約すると、領域の位置情報を格納するためにB +ツリーに似て三層構造のHBase。
レベル | 名前 | 効果 |
---|---|---|
第一層 | 飼育係のファイル | これは、位置情報-ROOT-テーブルを記録します |
第二層 | -ROOT-テーブル | 録画.META。地域の位置情報テーブル、-ROOT-テーブルには1つの領域だけを持っています。-ROOT-テーブルによって.META。データテーブルにアクセスすることができます |
第三層 | .META.表 | ユーザデータテーブル領域の位置情報を記録し、.META。領域テーブルは、複数を有していてもよく、地域内のHBaseは、すべてのユーザ・データ・テーブルの位置情報を保存し |
HBaseの操作機構
HBaseのシステムアーキテクチャ
HBaseのシステムアーキテクチャは、クライアント、飼育係のサーバー、マスターサーバ、リージョンサーバーが含まれています。HBaseのHDFSは、一般的に基礎となるデータストアとして使用します。
クライアント:地域を維持することが、フォローアップのデータアクセスのプロセスをスピードアップするために、キャッシュ内の位置情報を訪れたが、HBaseのにアクセスするためのインタフェースが含まれています。HBaseのHBaseのクライアントが通信するために、マスタ地域サーバとサーバとのRPCメカニズムを使用しています。
飼育係:飼育係ストレージ-ROOT-アドレスとマスターアドレスのテーブルは、リージョンサーバーのイニシアチブは、マスターは、常に各地域サーバーの健康状態を認知できるように、飼育係に登録することができます。飼育係は、クラスタとしてマニホールドマスターを選出助け、いつでも問題「単一障害点」のマスターを回避し、実行中の唯一のマスターは、常にあることを確認することができます。
Master主服务器:Master主要负责表和Region的 管理工作
- 管理用户对表的增加、删除、修改等操作
- 实现不同Region服务器之间的负载均衡
- 在Region分裂或合并后,负责重新调整Region的分布
- 对发生故障失效的Region服务器上的Region进行迁移
Region服务器:HBase中最核心的模块,负责维 护分配给自己的Region,并响应用户的读写请求。
Region工作原理
Region服务器内部管理了一系列 Region对象和一个共用的 HLog文件。HLog文件是磁盘上面的记录文件,记录了所有的更新操作。每个 Region对象又是由多个 Store组成的,,每个 Store又包含了一个 MemStore和若干个 StoreFile。其中,MemStore是在内存中的缓存,保存最近更新的数据,StoreFile是磁盘中的文件。
这些文件都是 B树结构,方便快速读取。StoreFile在底层的实现方式是 HDFS文件系统的 HFile,HFile的数据块通常采用压缩方式存储,压缩之后可以大大减少网络 I/O和磁盘 I/O。
Store是 Region服务器的核心,每个 Store对应了表中的一个列族的存储。当用户写入数据时,系统首先把数据放入 MemStore缓存,当缓存满时,就会刷新到磁盘中的一个 StoreFile文件中。StoreFile达到一定的数量之后就会触发文件合并操作,多个 StoreFile合并成一个大的 StoreFile文件,这个StoreFile会越来越大。当StoreFile文件的大小超过一定的阈值时,就会触发文件分裂操作。同时,当前的父 Region会被分裂成2个子 Region,父 Region会下线,新分裂出的2个子 Region会被 Master分配到相应的 Region服务器上。
HBaseのハントは、正常な状態がシステム障害に復元することができることを確認するために使用しました。各サーバーのリージョンHBaseのシステムは、(ログ先行書き込み)のログ先行書き込みです[ハント]ファイルで構成されています。最初のログに書き込まれたデータを更新する必要があり、ユーザがMemStore対応するログがディスクに書き込まれるまでMemStoreキャッシュ、キャッシュコンテンツを書き込むことができ、キャッシュの内容がディスクにフラッシュされます。
サーバーは、地域に失敗した場合、各地域のサーバのモニタリング飼育係のリアルタイムのステータスは、飼育係は、マスターに通知します。マスターは、最初のレガシーサーバーの障害文書上の領域[ハント]を扱います、[ハント]ファイルの遺産は、複数のオブジェクト領域からログレコードが含まれています。リージョンによるシステムは、ハントは、次に、対応するディレクトリオブジェクト領域にそれぞれデータを分割し、失敗したリージョンRegionに使用可能なサーバを再割り当て、及び対象地域では、それぞれのログ・レコードが属するオブジェクトハント関連するログ・レコードはまた、適切なサーバーの地域に送信されます。
[ハント]ロギングと将来に関連するオブジェクトは、伐採事業の多様で再び行われることになるだけでなく、自分に割り当てられたリージョンを受信する地域サーバ、MemStoreキャッシュへのライトデータロギングは、その後、ディスクにフラッシュStoreFileファイル、完全なデータ回復。
HBaseのシステムは、各地域のサーバーのみが地域のすべてのオブジェクトは、[ハント]を共有し、[ハント]ファイルを維持する必要があります。これは、ディスクがシーク時間と、テーブルへの書き込みパフォーマンスを向上させる減らすことができます。