HBaseとHadoop / HDFSの違い


130

これは素朴な質問ですが、私はNoSQLパラダイムに不慣れで、あまり詳しくありません。それで、誰かがHBaseとHadoopの違いを明確に理解するのを助けることができるか、または違いを理解するのに役立つかもしれないいくつかの指針を与えるなら。

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

Plsは私を自由に修正してください。

ありがとう。


7
おそらく、質問のタイトルは「HBaseとHDFSの違い」でしょうか。
マットボール

回答:


248

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の間でも同様の比較が行われます。


非常に大量のデータ(小さなファイル)のhbaseをdatalakeとして使用するのはどうですか?彼はhdfsと同じ量のデータを管理できますか?
Mehdi TAZI 2016年

@MehdiTAZI間違いなく。HBaseはHDFSの上で実行されるため、スケーラビリティについて心配する必要はありません。最大のパフォーマンスを得るためにHBaseを使用する必要があるため、HBaseを使用していることを確認する必要があります
Tariq

運用上の問題はどうですか?
Mehdi TAZI 2016

HBaseが運用チームの悪夢だとは言えませんが、それでも改善の余地があるいくつかの領域があり、コミュニティはそれを修正するために一生懸命取り組んでいます。しかし、それはどのソフトウェアにも当てはまります。問題を証明するツール/テクノロジーの私見はありません。それがあなたの要件に合うなら、あなたは間違いなくそれを試すべきです。これは、ランダムなリアルタイムの読み取り/書き込みのニーズを処理する素晴らしいツールです。
タリク

22

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

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

HBaseは、大規模なテーブルの構造化データストレージをサポートするスケーラブルな分散データベースです。BigtableGoogleファイルシステムによって提供される分散データストレージを活用するのと同様に、Apache HBaseはHadoopおよびHDFSの上にBigtableのような機能を提供します。

HBaseを使用する場合:

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

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

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

概要:

キーによるデータのロード、キー(または範囲)によるデータの検索、キーによるデータの提供、キーによるデータのクエリ、またはスキーマに適合しない行ごとのデータの格納を行う場合は、HBaseを検討してください。

clouderaブログのHBaseのDo's and Do n'tをご覧ください。


非常に大量のデータ(小さなファイル)のhbaseをdatalakeとして使用するのはどうですか?彼はhdfsと同じ量のデータを管理できますか?
Mehdi TAZI 2016年

1
多数の小さなファイルを作成する場合は、アクセスパターンに応じて、異なるタイプのストレージがより適切な場合があります。HBaseはデータをMapFiles(インデックス付きのSequenceFiles)に保存し、MapReduceスタイルのストリーミングを行う必要がある場合に適しています。時折のランダムルックアップによる分析
Ravindra babu 2016年

4

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

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

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


4

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

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

注意:

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

HDFSは、大きなファイルのストレージに最適な分散ファイルシステムです。これは、ファイル内の個々のレコードの高速検索を提供しません。

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

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

ええと、インフラストラクチャレベルでは、クラスター内の各スレーブマシンには次のデーモンがあります。

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

スレーブ機

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

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

  • テーブル

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

    • HBaseの列は、:(コロン)文字で区切られた列ファミリーと列修飾子で構成されます。
  • 列ファミリー

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

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

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

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

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

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

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

メタテーブル

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

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

ソースおよび詳細情報:

  1. HBaseデータモデル
  2. HBaseアーキテクト

1

リファレンス:http : //www.quora.com/What-is-the-difference-between-HBASE-and-HDFS-in-Hadoop

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

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

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


0

HDFSはJavaベースの分散ファイルシステムで、Hadoopクラスター内の複数のノードにまたがって大きなデータを格納できます。一方、HBaseはNoSQLデータベースです(NTFSやMySQLと同様)。

HDFSとHBaseはどちらも、分散環境で構造化、半構造化、非構造化などのあらゆる種類のデータを格納します。

HDFSとHBaseの違い

  • HBaseは大きなデータセット内の少量のデータへの低レイテンシアクセスを提供し、HDFSは高レイテンシ操作を提供します。
  • HBaseはランダムな読み取りと書き込みをサポートし、HDFSはWORM(1回の書き込みを複数回または複数回読み取り)をサポートします。
  • HDFSは基本的または主にMapReduceジョブを介してアクセスされますが、HBaseはシェルコマンド、Java API、REST、AvroまたはThrift APIを介してアクセスされます。

HDFSは、大規模なデータセットを分散環境に格納し、そのデータのバッチ処理を活用します。

HBaseは、各列が一緒に格納されるように列指向の方法でデータを格納しますが、リアルタイム処理を利用して読み取りが高速になります。

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.