最近リリースされた ( http://mirror.facebook.com/facebook/hive/hadoop-0.17/ ) Hive と HBase のパフォーマンスの比較に興味があります。Hive で使用される SQL に似たインターフェイスは、実装した HBase API よりもはるかに優れています。
7 に答える
Hive について多くを見つけるのは難しいですが、Hive のサイトで、HBase に大きく傾いている次のスニペットを見つけました (太字が追加されています)。
Hive は、バッチ処理システムである Hadoop に基づいています。したがって、このシステムは、クエリの低レイテンシを保証するものではなく、保証することもできません。ここでのパラダイムは、リアルタイムのクエリではなく、厳密にジョブを送信し、ジョブが完了したときに通知を受けることです。その結果、分析が非常に少量のデータで行われる Oracle のようなシステムと比較すべきではありませんが、分析は反復間の応答時間が数分未満で、はるかに反復的に進行します。Hive クエリの応答時間は、最小のジョブでも 5 ~ 10 分程度であり、大規模なジョブの場合は数時間かかることもあります。
HBase と HyperTable はすべてパフォーマンスに関するものなので (Google の BigTable をモデルにしています)、Hive よりもはるかに高速であるように思えますが、機能が犠牲になり、学習曲線が高くなります (たとえば、結合や SQL がないなど)。のような構文)。
ある観点から見ると、Hive は、SQL に似た文法とパーサー、クエリ プランナー、クエリ実行エンジン、メタデータ リポジトリ、列型ストレージ レイアウトの 5 つの主要コンポーネントで構成されています。その主な焦点はデータ ウェアハウス スタイルの分析ワークロードであるため、キーによる値の低レイテンシー取得は必要ありません。
HBase には、独自のメタデータ リポジトリと列型ストレージ レイアウトがあります。HBase テーブルに対して HiveQL クエリを作成できるため、HBase は Hive の文法とパーサー、クエリ プランナー、およびクエリ実行エンジンを利用できます。詳細については、 http://wiki.apache.org/hadoop/Hive/HBaseIntegrationを参照してください。
Hive は分析ツールです。pig と同じように、map reduce を活用することで、潜在的に膨大な量のデータをアドホックにバッチ処理するように設計されています。テラバイトを考えてください。リレーショナルデータベースでそれをしようと想像してみてください...
HBase は、BigTable に基づく列ベースのキー値ストアです。HBase 経由で map reduce ジョブを実行することはできますが、クエリ自体を実行することはできません。主な使用例は、キーによる行のフェッチ、または行の範囲のスキャンです。主な機能は、列の「ファミリ」の行キーの範囲全体をスキャンするときにデータの局所性を持つことができることです。
私の謙虚な知識では、Hive は Pig に匹敵します。Hive は SQL に似ており、Pig はスクリプト ベースです。ハイブは、クエリの最適化と実行エンジンを使用してより複雑に見えるだけでなく、エンド ユーザーがスキーマ パラメータ (パーティションなど) を指定する必要があります。どちらもテキスト ファイル、つまり sequenceFiles を処理するためのものです。
HBase は、キーと値のデータの保存と取得のためのものです...これらのキーと値のペア (行) をスキャンまたはフィルタリングできます。(キー、値) 行に対してクエリを実行することはできません。
Hive と HBase は異なる目的で使用されます。
ハイブ:
長所:
- Apache Hiveは、Hadoop上に構築されたデータ ウェアハウス インフラストラクチャです。
- これにより、 HDFSに保存されたデータをクエリして、SQL に似た言語であるHQLを介して分析することができます。これは、一連のMap Reduce ジョブに変換されます。
- Hadoopでのみバッチ プロセスを実行します。
- JDBC に準拠しており、既存の SQL ベースのツールとも統合できます
- ハイブはパーティションをサポートします
- 一定期間にわたって収集されたデータの分析クエリをサポートします
短所:
- 現在、更新ステートメントをサポートしていません
- ファイルとディレクトリを列にマップするために、事前定義されたスキーマを提供する必要があります
HBase:
長所:
- 大規模なテーブルの構造化データ ストレージをサポートするスケーラブルな分散データベース
- ビッグデータへのランダムでリアルタイムの読み取り/書き込みアクセスを提供します。HBase 操作は、MapReduce ジョブではなく、データベース上でリアルタイムで実行されます
- テーブルへのパーティションをサポートし、テーブルはさらに列ファミリーに分割されます
- Hadoop を使用して、大量のデータを水平方向にスケーリングします。
- 保存または取得時にデータへのキーベースのアクセスを提供します。行の追加または更新をサポートしています。
- データのバージョン管理をサポートします。
短所:
- HBase クエリは、習得が必要なカスタム言語で記述されています
- HBase は ACID に完全には準拠していません
- 複雑なアクセス パターン (結合など) では使用できません。
- また、大規模なバッチ MapReduce を実行する場合、HDFS の完全な代替ではありません。
概要:
Hive は分析クエリに使用でき、HBase はリアルタイム クエリに使用できます。データは、Hive から HBase に読み書きすることもできます。
最新の Hive リリースの時点で、Hive と HBase が統合されたため、小さな更新が必要な多くの変更が行われました。これは、Hive を HBase データストアへのクエリ レイヤーとして使用できることを意味します。現在、人々が代替の HBase インターフェイスを探している場合、Pig はHBase データを読み込んで保存するための非常に優れた方法も提供します。さらに、Cloudera Impalaは、HBase に加えて、かなりのパフォーマンスの Hive ベースのクエリを提供する可能性があるようです。彼らは、従来の Hive セットアップよりも最大 45 倍高速なクエリを主張しています。
Hive と Hbase を比較するために、次の定義を思い出してください。
トランザクションを処理するように設計されたデータベースは、分析を処理するようには設計されていません。分析をうまく行うように構造化されていません。一方、データ ウェアハウスは、分析を迅速かつ簡単に行えるように構成されています。
Hive は、Hadoop 上に構築されたデータ ウェアハウス インフラストラクチャであり、長時間実行される ETL ジョブに適しています。Hbase は、リアルタイム トランザクションを処理するように設計されたデータベースです。