web-dev-qa-db-ja.com

HBaseとHadoop / HDFSの違い

これは一種の素朴な質問ですが、私はNoSQLパラダイムは初めてであり、それについてあまり知りません。だから誰かが私にHBaseとHadoopの違いを明確に理解するのを手伝ってくれるなら、あるいは私が違いを理解するのに役立つかもしれないいくつかの指針を与えれば。

今まで、私はいくつかの研究とaccを行いました。私の理解では、HadoopはHDFSの生のデータチャンク(ファイル)で動作するフレームワークを提供し、HBaseはHadoop上のデータベースエンジンであり、基本的に生データチャンクではなく構造化データで動作します。 Hbaseは、SQLと同様にHDFS上に論理層を提供します。それが正しいか?

Plsは私を修正すること自由に感じます。

ありがとう。

126
Dhaval Shah

Hadoopは基本的にFS(Hadoop分散ファイルシステム)、計算フレームワーク(MapReduce)、および管理ブリッジ(Yet Another Resource Negotiator)の3つです。 HDFSでは、大量のデータを分散(読み取り/書き込みアクセスの高速化)および冗長化(可用性の向上)で保存できます。 MapReduceを使用すると、この巨大なデータを分散された並列の方法で処理できます。ただし、MapReduceはHDFSだけに限定されません。 FSであるHDFSには、ランダムな読み取り/書き込み機能がありません。順次データアクセスに適しています。そして、これがHBaseの出番です。これは、Hadoopクラスター上で実行され、データへのランダムなリアルタイム読み取り/書き込みアクセスを提供するNoSQLデータベースです。

構造化データと非構造化データの両方をHadoopに保存でき、HBaseにも保存できます。どちらも、シェルや他のAPIなど、データにアクセスするための複数のメカニズムを提供します。また、HBaseはデータをキー/値のペアとして列状に保存し、HDFSはデータをフラットファイルとして保存します。両方のシステムの顕著な特徴のいくつかは次のとおりです。

Hadoop

  1. 大きなファイルのストリーミングアクセス用に最適化されています。
  2. 追記型のイデオロギーに従います。
  3. ランダムな読み取り/書き込みをサポートしていません。

HBase

  1. キー/値のペアを列状に格納します(列は列ファミリとして一緒にクラブされます)。
  2. 大きなデータセット内から少量のデータへの低遅延アクセスを提供します。
  3. 柔軟なデータモデルを提供します。

Hadoopはオフラインのバッチ処理に最適ですが、リアルタイムのニーズがある場合はHBaseが使用されます。

類似の比較は、MySQLとExt4の間です。

240
Tariq

Apache Hadoop プロジェクトには4つの主要モジュールが含まれます

  1. Hadoop Common:他のHadoopモジュールをサポートする共通ユーティリティ。
  2. Hadoop分散ファイルシステム(HDFS™):アプリケーションデータへの高スループットアクセスを提供する分散ファイルシステム。
  3. Hadoop YARN:ジョブスケジューリングとクラスターリソース管理のフレームワーク。
  4. Hadoop MapReduce:AYARNベースの並列処理システム大きなデータセット。

HBaseは、大きなテーブルの構造化データストレージをサポートするスケーラブルな分散データベースです。 BigtableがGoogle File Systemが提供する分散データストレージを活用するように、Apache HBaseはHadoopとHDFSの上にBigtableのような機能を提供します。

HBaseを使用する場合:

  1. アプリケーションに、各行がわずかに異なる変数スキーマがある場合
  2. データがコレクションに格納されていることがわかった場合、それはすべて同じ値に基づいています
  3. ビッグデータへのランダムでリアルタイムの読み取り/書き込みアクセスが必要な場合。
  4. 保存または取得時にデータへのキーベースのアクセスが必要な場合。
  5. 既存のHadoopクラスターに大量のデータがある場合

しかし、HBaseにはいくつかの制限があります

  1. 従来のトランザクションアプリケーションやリレーショナル分析にも使用できません。
  2. また、大規模なバッチMapReduceを実行する場合、HDFSの完全な代替ではありません。
  3. SQLを使用せず、オプティマイザーを使用し、クロスレコードトランザクションまたは結合をサポートしません。
  4. 複雑なアクセスパターン(結合など)では使用できません

要約:

キーによるデータの読み込み、キー(または範囲)によるデータの検索、キーによるデータの提供、キーによるデータのクエリ、またはスキーマに適合しない行ごとのデータを保存する場合は、HBaseを検討してください。

cloudera ブログのHBaseの「する」と「しない」をご覧ください。

21
Ravindra babu

Hadoopは分散ファイルシステム、つまりHDFSを使用してビッグデータを保存しますが、HDFSには特定の制限があり、これらの制限を克服するために、HBase、Cassandra、MongodbなどのNoSQLデータベースが存在しました。

Hadoopはバッチ処理のみを実行でき、データはシーケンシャルな方法でのみアクセスされます。つまり、最も単純なジョブであっても、データセット全体を検索する必要があります。処理されると、巨大なデータセットは別の巨大なデータセットになり、これも順次処理する必要があります。この時点で、単一の時間単位でデータの任意のポイントにアクセスするための新しいソリューションが必要です(ランダムアクセス)。

他のすべてのファイルシステムと同様に、HDFSはストレージを提供しますが、フォールトトレラントな方法で、高いスループットとデータ損失のリスクの低減(レプリケーションのため)が、HDFSはファイルシステムであるため、ランダムな読み取りおよび書き込みアクセスがありません。これがHBaseが登場する場所です。 GoogleのBigTableをモデルにした、分散型のスケーラブルなビッグデータストアです。 Cassandraは、hbaseに多少似ています。

4

1つの画像でHBaseとHDFSの両方

Both HBase and HDFS in one picture

注:

DataNode(collocated Region Servers)およびHBaseとHadoop HDFSの両方を持つクラスター内のNameNodeのようなHDFSデーモン(緑色で強調表示)を確認します

HDFSは、大きなファイルの保存に適した分散ファイルシステムです。ファイル内の個々のレコードを高速で検索することはできません。

HBaseは、HDFSの上に構築され、大きなテーブルの高速レコード検索(および更新)を提供します。これは、概念的な混乱のポイントになる場合があります。 HBaseは、高速検索用にHDFSに存在するインデックス付き「StoreFiles」にデータを内部的に配置します。

これはどのように見えますか?

さて、インフラストラクチャレベルでは、クラスター内の各軟膏マシンには以下のデーモンがあります

  • リージョンサーバー-HBase
  • データNode-HDFS

Slave machine

ルックアップでどのくらい高速ですか?

HBaseは、次のデータモデルを使用して、基になるストレージとしてHDFS(場合によっては他の分散ファイルシステムも)で高速ルックアップを実現します。

  • テーブル

    • HBaseテーブルは複数の行で構成されます。
    • HBaseの行は、行キーと、値が関連付けられた1つ以上の列で構成されます。行は、格納されている行キーでアルファベット順にソートされます。このため、行キーの設計は非常に重要です。目標は、関連する行が互いに近くなるようにデータを保存することです。一般的な行キーパターンはWebサイトドメインです。行キーがドメインの場合は、おそらく逆に保存する必要があります(org.Apache.www、org.Apache.mail、org.Apache.jira)。この方法では、Apacheドメインはすべて、サブドメインの最初の文字に基づいて分散されるのではなく、テーブル内で互いに近くにあります。
    • HBaseの列は、列ファミリと列修飾子で構成され、:(コロン)文字で区切られます。
  • 列ファミリー

    • 列ファミリは、多くの場合パフォーマンス上の理由から、一連の列とその値を物理的にコロケートします。各列ファミリには、値をメモリにキャッシュするかどうか、データの圧縮方法または行キーのエンコード方法など、一連のストレージプロパティがあります。表の各行には同じ列ファミリーがありますが、特定の行には特定の列ファミリーに何も格納されない場合があります。
  • 列修飾子

    • 列ファミリーに列修飾子を追加して、特定のデータにインデックスを提供します。列ファミリーのコンテンツを考えると、列修飾子はcontent:htmlであり、別の列修飾子はcontent:pdfです。列ファミリーは表の作成時に固定されますが、列修飾子は変更可能であり、行間で大きく異なる場合があります。
  • 細胞

    • セルは行、列ファミリ、および列修飾子の組み合わせであり、値と値のバージョンを表すタイムスタンプが含まれます。
  • タイムスタンプ

    • タイムスタンプは各値と一緒に書き込まれ、特定のバージョンの値の識別子です。デフォルトでは、タイムスタンプはデータが書き込まれたときのRegionServerの時間を表しますが、データをセルに入れるときに別のタイムスタンプ値を指定できます。

クライアント読み取り要求フロー:

Client read request flow

上の写真のメタテーブルとは何ですか?

meta table

すべての情報の後、HBaseの読み取りフローは、これらのエンティティに触れるルックアップ用です。

  1. 最初に、スキャナーはブロックキャッシュ-読み取りキャッシュで行セルを探します。最近読み込まれたキー値はここにキャッシュされ、メモリが必要になると、最近使用されたものは削除されます。
  2. 次に、スキャナーはMemStore、つまり最新の書き込みを含むメモリ内の書き込みキャッシュを調べます。
  3. スキャナーがMemStoreおよびブロックキャッシュ内のすべての行セルを検出しない場合、HBaseはブロックキャッシュインデックスとブルームフィルターを使用してロードしますHFilesターゲット行セルが含まれる可能性のあるメモリに。

ソースと詳細:

  1. HBaseデータモデル
  2. HBase architecute
3
mrsrinivas

参照: http://www.quora.com/What-is-the-difference-between-HBASE-and-HDFS-in-Hadoop

Hadoopは、いくつかのサブシステムの一般的な名前です。1)HDFS。冗長性などを考慮してマシンのクラスター全体にデータを分散する分散ファイルシステム2)Map Reduce。 HDFS上のジョブ管理システム-HDFSに保存されたデータを処理するmap-reduce(およびその他のタイプ)ジョブを管理します。

基本的には、オフラインシステムを意味します。データをHDFSに保存し、ジョブを実行して処理できます。

一方、列ベースのデータベースのHBase。 HDFSをストレージとして使用します。これは、backup\redundency\etcを処理しますが、「オンラインストア」です。つまり、特定の行や行などを照会して、即時値を取得できます。

1
Jiaji Li