Impala は、ハイパフォーマンスかつ低レイテンシーを特徴とするリアルタイム SQL クエリエンジンです。Impala の SELECT 句、JOIN 句、集計関数を使用して、Hadoop 分散ファイルシステム (HDFS) または HBase に保存されているデータをリアルタイムでクエリできます。
背景情報
Impala は、Apache Hive と同じメタデータ、SQL 構文 (Hive SQL)、および Open Database Connectivity (ODBC) ドライバーを使用して、バッチ処理またはリアルタイムクエリのための使い慣れた統合プラットフォームを提供します。
注意事項
Impala を使用しているときに Hive テーブル内のパーティションを削除する場合は、Impala または Hive CLI でコマンドを実行してパーティションを削除する必要があります。システムファイルパスからパーティションディレクトリを直接削除すると、Hive テーブルは利用できなくなります。
利点
レイテンシーを最小限に抑えるために、Impala は MapReduce の代わりに分散クエリエンジンを使用してデータにアクセスします。このエンジンは、リレーショナルデータベース管理システム (RDBMS) のエンジンに似ています。このエンジンのパフォーマンスは、クエリの種類と設定によって異なり、Hive よりも桁違いに高速です。
Hadoop と比較して、Impala は SQL クエリにおいて次の利点があります:
-
データノードでローカル処理が実行されるため、ネットワークのボトルネックを回避できます。
-
データ形式を変換する必要がないため、データ形式の変換に対して課金されることはありません。
-
単一のオープンで統一されたメタデータストレージを使用できます。
-
抽出、変換、ロード (ETL) 処理による遅延なしに、すべてのデータをすぐにクエリできます。
-
すべてのハードウェアが Impala クエリと MapReduce に使用されます。
-
スケーラビリティの実装に必要なツールは 1 つだけです。
Impala の詳細については、「Apache Impala」をご参照ください。
Impala のコンポーネント
次の図は、E-MapReduce (EMR) クラスター内の Impala のコンポーネントを示しています。
Impala は、次のコンポーネントで構成されます:
-
Impalad
Impalad プロセスはコアノードとタスクノードにデプロイされ、スケーリングが可能です。
Impala のコアコンポーネントは、各ノードで実行される Impala デーモンです。Impala デーモンは、Impalad という名前のプロセスで表されます。Impala デーモンは、ファイルの読み書き、
impala-shellコマンド、Hue、Java Database Connectivity (JDBC)、または ODBC から送信されたクエリステートメントの受信、クエリの並列化、およびクラスターの Impala ノードへのタスクの分散に使用されます。さらに、Impala デーモンは、ローカルで計算されたクエリ結果をコーディネーターノードに返すためにも使用されます。 -
Statestored
Statestored プロセスは master-1-1 ノードにデプロイされます。
StateStore デーモンは、Statestored という名前のプロセスで表されます。StateStore デーモンは、クラスター内のすべての Impalad プロセスのヘルスステータスを管理し、そのステータス結果をすべての Impalad プロセスに転送します。ノードの例外、ネットワークの例外、またはソフトウェアの問題によって Impalad プロセスが利用できなくなった場合、StateStore デーモンは他の Impalad プロセスに異常を通知します。新しいクエリリクエストが開始されると、そのクエリリクエストは利用できない Impalad プロセスには配信されません。
-
Catalogd
Catalogd プロセスは master-1-1 ノードにデプロイされます。
Catalog デーモンは、Catalogd という名前のプロセスで表されます。Catalog デーモンは、各 Impalad プロセスでのメタデータの変更を、同じクラスター内の他の Impalad プロセスに同期します。すべてのリクエストは Statestored プロセスを介して配信されるため、StateStore デーモンと Catalog デーモンは同じノードで実行することを推奨します。