ホーム テクノロジー アパッチHTTP Apache Hive と Apache Impala: 主な違い

Apache Hive と Apache Impala: 主な違い


ビッグ データ分析に慣れていない場合は、Apache ツールのホストが注目されるかもしれません。ただし、さまざまなツールが存在するため、混乱し、場合によっては圧倒されてしまう可能性があります。

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

アパッチハイブ

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

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

ハイブ
ハイブ

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

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

Apache Hive の仕組み

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

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

ハイブサーバー1
ハイブサーバー1

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

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

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

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

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

ハイブの特徴

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

Apache Hive: 利点

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

Apache Hive の主な利点の中で、「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
apache-impala-ロゴ-1

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

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

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

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

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

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

Apache Impala の仕組み

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

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

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

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: 類似点

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 と Impala の違い
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 を直接比較してみることもできます。

「 Apache Hive と Apache Impala: 主な違い」についてわかりやすく解説!絶対に観るべきベスト2動画

ハイブ vs インパラ
Hive vs Hive LLAP vs Impala