Apache Hive と Apache Impala: 主な違い

公開: 2022-11-23

ビッグ データ分析に慣れていない場合は、多数の apache ツールを目にしているかもしれません。 ただし、さまざまなツールがあると混乱し、場合によっては圧倒されることもあります。

この投稿では、この混乱を解決し、Apache Hive と Impala とは何か、そしてそれらの違いについて説明します!

アパッチハイブ

Apache Hive は、Apache Hadoop プラットフォーム用の SQL データ アクセス インターフェイスです。 Hive を使用すると、SQL 構文を使用してデータのクエリ、集計、および分析を行うことができます。

HDFS ファイル システム内のデータには読み取りアクセス スキームが使用されるため、データを通常のテーブルやリレーショナル DBMS と同様に扱うことができます。 HiveQL クエリは、MapReduce ジョブの Java コードに変換されます。

ハイブ

Hive クエリは、SQL 言語に基づく HiveQL クエリ言語で記述されていますが、SQL-92 標準を完全にはサポートしていません。

ただし、この言語により、プログラマーは、HiveQL 機能を使用するのが不便または非効率的な場合にクエリを使用できます。 HiveQL は、ユーザー定義のスカラー関数 (UDF)、集計 (UDAF コード)、およびテーブル関数 (UDTF) で拡張できます。

Apache ハイブはどのように機能しますか

Apache Hive は、HiveQL 言語 (SQL に近い言語) で記述されたプログラムを 1 つ以上の MapReduce、Apache Tez、または Apache Spark タスクに変換します。 これらは、Hadoop で起動できる 3 つの実行エンジンです。 次に、Apache Hive はデータを Hadoop Distributed File System (HDFS) ファイルの配列に編成し、クラスターでジョブを実行して応答を生成します。

Apache Hive テーブルはリレーショナル データベースに似ており、データ ユニットは最も重要なユニットから最も詳細なユニットへと編成されます。 データベースはパーティションで構成される配列であり、これも「バケット」に分割できます。

ハイブサーバー1

データは HiveQL 経由でアクセスできます。 各データベース内で、データには番号が付けられ、各テーブルは HDFS ディレクトリに対応します。

Web インターフェイス、CLI、外部クライアントなど、Apache Hive アーキテクチャ内で複数のインターフェイスを使用できます。

実際、「Apache Hive Thrift」サーバーを使用すると、リモート クライアントは、さまざまなプログラミング言語を使用してコマンドや要求を Apache Hive に送信できます。 Apache Hive の中央ディレクトリは、すべての情報を含む「メタストア」です。

Hive を機能させるエンジンは「ドライバー」と呼ばれます。 コンパイラとオプティマイザをバンドルして、最適な実行計画を決定します。

最後に、セキュリティは Hadoop によって提供されます。 したがって、クライアントとサーバー間の相互認証は Kerberos に依存します。 Apache Hive で新しく作成されたファイルのアクセス許可は、HDFS によって決定され、ユーザー、グループ、またはその他の承認を許可します。

ハイブの特徴

  • Hadoop と Spark の両方のコンピューティング エンジンをサポート
  • HDFS を使用し、データ ウェアハウスとして機能します。
  • MapReduce を使用し、ETL をサポートします
  • HDFS により、Hadoop と同様のフォールト トレランスを備えています。

Apache ハイブ: 利点

Apache Hive は、クエリとデータ分析の理想的なソリューションです。 定性的な洞察を得ることを可能にし、競争上の優位性を提供し、市場の需要への対応を促進します。

Apache Hive の主な利点の 1 つは、その「SQL に適した」言語に関連する使いやすさです。 さらに、データを内部データベース形式でディスクから読み取ったり、番号を付けたりする必要がないため、データの最初の挿入が高速化されます。

データが HDFS に保存されていることがわかっているため、最大数百ペタバイトのデータの大規模なデータセットを Apache Hive に保存できます。 このソリューションは、従来のデータベースよりもはるかにスケーラブルです。 Apache Hive はクラウド サービスであるため、ユーザーはワークロード (タスク) の変動に基づいて仮想サーバーをすばやく起動できます。

セキュリティは、問題が発生した場合に回復に不可欠なワークロードを複製する機能により、Hive のパフォーマンスが向上する側面でもあります。 最後に、1 時間あたり最大 100,000 のリクエストを実行できるため、処理能力は比類のないものです。

アパッチ インパラ

Apache Impala は、Apache Hadoop に格納されたデータに対して SQL クエリを対話的に実行するための超並列 SQL クエリ エンジンであり、C++ で記述され、Apache 2.0 ライセンスの下で配布されています。

Impala は MPP (Massively Parallel Processing) エンジン、分散 DBMS、SQL-on-Hadoop スタック データベースとも呼ばれます。

Apache-Impala-ロゴ-1

Impala は分散モードで動作し、プロセス インスタンスは異なるクラスター ノードで実行され、クライアント リクエストの受信、スケジューリング、および調整を行います。 この場合、SQL クエリのフラグメントの並列実行が可能です。

クライアントは、Apache Hadoop (HBase および HDFS) または Amazon S3 に格納されたデータに対して SQL クエリを送信するユーザーおよびアプリケーションです。 Impala との対話は、HUE (Hadoop ユーザー エクスペリエンス) Web インターフェイス、ODBC、JDBC、および Impala シェル コマンド ライン シェルを介して行われます。

Impala は、メタデータ ストアを使用して、別の一般的な SQL-on-Hadoop ツールである Apache Hive にインフラストラクチャ的に依存しています。 特に、Hive メタストアは Impala にデータベースの可用性と構造を知らせます。

スキーマ オブジェクトを作成、変更、および削除するか、SQL ステートメントを介してデータをテーブルにロードすると、対応するメタデータの変更が、専用のディレクトリ サービスを使用してすべての Impala ノードに自動的に伝達されます。

Impala の主要コンポーネントは、次の実行可能ファイルです。

  • Impalad または Impala デーモンは、HDFS、HBase、および Amazon S3 データに対するクエリをスケジュールして実行するシステム サービスです。 各クラスタ ノードで 1 つの impalad プロセスが実行されます。
  • Statestore は、クラスター内のすべての impalad インスタンスの場所とステータスを追跡するネーミング サービスです。 このシステム サービスの 1 つのインスタンスは、各ノードとメイン サーバー (名前ノード) で実行されます。
  • Catalog は、Impala DDL および DML ステートメントからの変更を影響を受けるすべての Impala ノードに伝達するメタデータ調整サービスであり、新しいテーブルまたは新しくロードされたデータがクラスター内の任意のノードにすぐに表示されます。 Statestored デーモンと同じクラスタ ホストで Catalog の 1 つのインスタンスを実行することをお勧めします。

Apache Impala の仕組み

Impala は、Apache Hive と同様に、SQL の代わりに SQL92 のサブセットである同様の宣言型クエリ言語である Hive Query Language (HiveQL) を使用します。

Impala でのリクエストの実際の実行は次のとおりです。

クライアント アプリケーションは、標準化された ODBC または JDBC ドライバー インターフェイスを介して任意の impalad に接続することにより、SQL クエリを送信します。 接続された impalad は、現在のリクエストのコーディネーターになります。

SQL クエリが分析され、クラスター内の impalad インスタンスのタスクが決定されます。 次に、最適なクエリ実行プランが構築されます。

Impalad は、システム サービスのローカル インスタンスを使用して HDFS と HBase に直接アクセスし、データを提供します。 Apache Hive とは異なり、中間結果が保存されないため、このような直接対話はクエリの実行時間を大幅に節約します。

それに応じて、各デーモンはデータを調整する impalad に返し、結果をクライアントに送り返します。

インパラ

インパラの特徴

  • リアルタイムのインメモリ処理のサポート
  • SQL フレンドリー
  • HDFS、Apache HBase、Amazon S3 などのストレージ システムをサポート
  • Pentaho や Tableau などの BI ツールとの統合をサポート
  • HiveQL 構文を使用

Apache Impala: 利点

Impala は、すべてのシステム デーモン プロセスが起動時に直接開始されるため、起動時のオーバーヘッドの可能性を回避します。 これにより、クエリの実行時間が大幅に短縮されます。 Impala の速度がさらに向上するのは、Hadoop 用のこの SQL ツールが Hive とは異なり、中間結果を保存せず、HDFS または HBase に直接アクセスするためです。

さらに、Impala は、Hive のようにコンパイル時ではなく、実行時にプログラム コードを生成します。 ただし、Impala の高速パフォーマンスの副作用として、信頼性の低下があります。

特に、SQL クエリの実行中にデータ ノードがダウンした場合、Impala インスタンスが再起動し、Hive はデータ ソースへの接続を維持し続け、フォールト トレランスを提供します。

Impala のその他の利点には、セキュアなネットワーク認証プロトコル Kerberos の組み込みサポート、優先順位付け、リクエストのキューを管理する機能、および LZO、Avro、RCFile、Parquet、Sequence などの一般的なビッグ データ形式のサポートが含まれます。

ハイブ対インパラ: 類似点

Hive と Impala は Apache Software Foundation ライセンスの下で自由に配布されており、Hadoop クラスターに格納されたデータを操作するための SQL ツールを参照しています。 さらに、HDFS 分散ファイル システムも使用します。

Impala と Hive は、Apache Hadoop クラスターに格納されたビッグ データの SQL 処理に共通の焦点を当てたさまざまなタスクを実装します。 Impala は SQL に似たインターフェースを提供し、Hive テーブルの読み取りと書き込みを可能にして、データ交換を容易にします。

同時に、Impala は Hadoop での SQL 操作を非常に高速かつ効率的にするため、この DBMS をビッグ データ分析研究プロジェクトで使用できます。 可能な限り、Impala は、実行時間の長い SQL バッチ クエリの実行に既に使用されている既存の Apache Hive インフラストラクチャと連携します。

また、Impala はそのテーブル定義をメタストア、従来の MySQL または PostgreSQL データベース、つまり Hive が同様のデータを格納するのと同じ場所に格納します。 すべての列が Impala でサポートされているデータ型、ファイル形式、および圧縮コーデックを使用している限り、Impala は Hive テーブルにアクセスできます。

ハイブ対インパラ: 違い

Hive と Impala の違い

プログラミング言語

Hive は Java で記述されていますが、Impala は C++ で記述されています。 ただし、Impala は一部の Java ベースの Hive UDF も使用します。

ユースケース

データ エンジニアは、ETL プロセス (抽出、変換、読み込み) で Hive を使用します。たとえば、旅行アグリゲーターや空港情報システムなどの大規模なデータ セットで長時間実行されるバッチ ジョブに使用されます。 一方、Impala は主にアナリストやデータ サイエンティストを対象としており、主にビジネス インテリジェンスなどのタスクで使用されます。

パフォーマンス

Impala は SQL クエリをリアルタイムで実行しますが、Hive はデータ処理速度が遅いという特徴があります。 単純な SQL クエリを使用すると、Impala は Hive よりも 6 ~ 69 倍高速に実行できます。 ただし、Hive は複雑なクエリをより適切に処理します。

レイテンシー/スループット

Hive のスループットは、Impala よりも大幅に高くなっています。 メモリ内のクエリ キャッシュを有効にする LLAP (Live Long and Process) 機能により、Hive は低レベルの優れたパフォーマンスを実現します。

LLAP には、長期的なシステム サービス (デーモン) が含まれています。これにより、HDFS データ ノードと直接対話し、緊密に統合された DAG クエリ構造 (有向非巡回グラフ) を置き換えることができます。これは、ビッグ データ コンピューティングで積極的に使用されるグラフ モデルです。

耐障害性

Hive は、すべての中間結果を保持するフォールト トレラント システムです。 また、スケーラビリティにも良い影響を与えますが、データ処理速度の低下につながります。 一方、Impala はメモリ バウンドが多いため、フォールト トレラントなプラットフォームとは言えません。

コード変換

Hive はコンパイル時にクエリ式を生成しますが、Impala は実行時にクエリ式を生成します。 Hive の特徴は、アプリケーションを初めて起動したときの「コールド スタート」の問題です。 データ ソースへの接続を確立する必要があるため、クエリはゆっくりと変換されます。

Impala には、この種の起動オーバーヘッドはありません。 SQL クエリの処理に必要なシステム サービス (デーモン) が起動時に開始されるため、作業が高速化されます。

ストレージのサポート

Impala は LZO、Avro、および Parquet 形式をサポートし、Hive はプレーン テキストと ORC で動作します。 ただし、どちらも RCFIle および Sequence 形式をサポートしています。

アパッチハイブアパッチ インパラ
言語ジャワC++
ユースケースデータエンジニアリング分析と分析
パフォーマンス単純なクエリでは高い比較的低い
レイテンシーキャッシュによる遅延の増加潜在性が低い
耐障害性MapReduce による耐性の向上MPPのため耐性が低い
変換コールドスタートによる低速より速い変換
ストレージのサポートプレーンテキストと ORC LZO、アブロ、寄木細工

最後の言葉

Hive と Impala は競合するのではなく、お互いを効果的に補完します。 この 2 つには大きな違いがありますが、多くの共通点もあり、どちらを選択するかはプロジェクトのデータと特定の要件によって異なります。

また、Hadoop と Spark を直接比較することもできます。

.