Impala:アーキテクチャとコンポーネント

Impalaの概要

Impalaはリアルタイムクエリツールです。主な目的は、SQL-on-Hadoop操作を高速かつ効率的にすることです。これにより、HadoopでのビッグデータSQLクエリのパフォーマンスが向上します。Impalaは、ビッグデータクエリツールの補足です。Impalaは、HiveなどのMapReduceで構築されたバッチ処理フレームワークを置き換えません。

Impalaは、HDFS、HBase、またはAmazon Object Storage Service(S3)に保存されているデータを直接読み取ります。Hiveと同じストレージプラットフォームを使用するだけでなく、impalaはHiveと同じメタデータ、SQL構文(Hive SQL)、ODBCドライバー、およびユーザーインターフェイス(HUEのImpalaクエリUI)も使用します。

MapReduceおよびその他のフレームワーク(sparkなど)に基づくHiveは、抽出、変換、ロード(ETL)を伴うジョブなど、長時間実行されるバッチジョブに適しています。Impalaはインタラクティブなクエリに適しています。

遅延を回避するために、ImpalaはMapReduceをバイパスし、専用の分散クエリエンジンを介してデータに直接アクセスします。これ、商用分散RDBMSのクエリエンジンとよく似ていますこの結果は、クエリの種類と構成に応じて、ハイブよりも桁違いに速いパフォーマンスです。

ImpalaがApach Hadoopでどのように機能するか

ImpalaがHadoopエコシステムにどのように適合するか

Impalaは、Hadoopエコシステムの多くの使い慣れたコンポーネントを利用しています。Impalaは他のHadoopコンポーネントと(コンシューマーおよびプロデューサーとして)データを交換できるため、ETLおよびELTパイプラインに柔軟に配置できます。

ImpalaとHiveの連携

Impalaの主な目的は、SQL-on-Hadoop操作を高速かつ効率的にすることです。実際のアプリケーションでは、多くのHadoopユーザーの既存のHiveデータを使用して、長時間実行されるバッチ指向のSQLクエリを実行します。

Impalaは、HiveによってMySQLまたはPostgreSQLに格納されているメタデータ情報を使用し、独自のメタデータ情報の一部を同じデータベースに格納できます。すべての列がImpalaでサポートされているデータ型、ファイル形式、およびファイル形式を使用している限り、このMySQLまたはPostgreSQLはメタストアと呼ばれます。コーデックを圧縮すると、ImpalaはHiveによって定義またはロードされたテーブルにアクセスできます。

Impalaのメタデータとメタストアの概要

上記のように、Impalaはメタストアと呼ばれるデータベースにテーブルメタデータ情報を保持し、HDFS内のブロックの物理的な場所など、いくつかの下位レベルのメタデータ情報も保存します。

大量のデータまたは複数のパーティションを持つテーブルの場合、テーブルのすべてのメタデータの取得には非常に時間がかかり、場合によっては数分かかることがあります。したがって、各Impalaノードは、同じテーブルに対する今後のクエリのためにこれらのメタデータをすべてキャッシュします。

テーブルのメタデータまたはテーブル内のデータが更新されている場合、クラスター内の他のすべてのImpaladプロセスは最新のメタデータを受信し、古いキャッシュメタデータを置き換えてから、テーブルにクエリを実行する必要があります。Impala 1.2以降では、メタデータの更新は自動的に行われ、カタログプロセスを通じて調整されます。

Hiveを介してテーブルに加えられた変更、またはHDFS内のファイルへの手動の変更については、REFRESHステートメント(新しいデータファイルが既存のテーブルに追加された場合)またはINVALIDATAステートメント(まったく新しいテーブルの場合)を使用する必要があります。テーブルを削除した後、HDFSリバランス操作を実行するか、データファイルを削除します)。INVALIDATE METADATA実行すると、メタストアによって追跡されるすべてのテーブルのメタデータが取得されます。Impalaの外部のプログラム(Hiveなど)によって特定のテーブルのみが変更されていることがわかっている場合は、影響を受ける各テーブルに対してREFRESH table_nameを実行して、これらのテーブルの最新のメタデータのみを取得できます。

ImpalaがHDFSを使用する方法

Impalaは、主要なデータストレージメディアとして分散ファイルシステムHDFSを使用します。Impalaは、HDFSが提供する冗長性に依存して、単一ノードでのハードウェアまたはネットワークの停止を防止します。Impalaテーブルデータは、おなじみのHDFSファイル形式と圧縮コーデックを使用して、HDFS内のデータファイルとして物理的に表現されます。データファイルが新しいテーブルのディレクトリに表示されると、Impalaはファイル名に関係なくすべてのデータファイルを読み取ります。名前がImpalaによって制御されるファイルに新しいデータが追加されます。

ImpalaはDataNodeと同じノードにデプロイできるため、Impalaはローカルファイルを直接読み取ることができ、ネットワーク転送で消費されるリソースを大幅に削減できます。

ImpalaがHBaseを使用する方法

HBaseは、ImpalaのデータストレージメディアHDFSの代替として機能します。これは、SQLサポートが組み込まれていないHDFS上に構築されたデータベースストレージシステムです。多くのHadoopユーザーはすでにそれを構成しており、大きな(通常はスパースな)データセットをそこに格納しています。Impalaでテーブルを定義し、それらをHBaseの同等のテーブルにマッピングすることで、Impalaを介してHBaseテーブルのコンテンツをクエリでき、ImpalaテーブルやHBaseテーブルを含む結合クエリを実行することもできます。

Impalaはどのようにクエリを完了しますか

  1.  ODBCまたはJDBCクライアントなどの標準化されたSQLインターフェースを提供することにより、ユーザーはSQLの一部をImpalaに送信します。これはクラスター内の任意のImpaladに送信でき、このImpaladがこのクエリステートメントのコーディネーターになります。
  2. ImpalaはSQLの一部を解析して分析し、最高の実行効率を得るためにImpalaインスタンスが実行する必要のあるタスクを決定します。
  3. HDFSやHBaseなどのストレージサービスは、ローカルのImpalaインスタンスにデータを提供します。
  4. 各Impalaインスタンスはデータを元のコーディネーターに返し、結果をクライアントに返します。

インパラの建築

クライアント:Hueを含む、ODBCクライアント、JDBCクライアント、およびImpalaシェルは、Impalaと対話できます。

Hive Metastore:ImpalaはHiveのメタデータ情報を使用でき、Hiveのメタデータを通じて、Hiveのデータベースとこれらのデータベースの構造を取得できます。テーブル構造を作成、削除、変更し、Impala SQLを介してテーブルにデータをロードすると、関連するメタデータが変更され、すべてのimpalaノードに自動的にブロードキャストされます。

Impala:ImpalaはDataNodeで実行され、クエリステートメントを調整および実行します。各Impalaインスタンスは、Impalaクライアントからのクエリを受信、計画、調整できます。クエリ作業はImpalaノードに分散され、これらのノードはこれらのクエリステートメントを並列に実行するワーカーとして機能します。

HBaseおよびHDFS:照会されるデータを格納するために使用されます。

Impalaコンポーネント

インパラド

Impalaは、分散型の超並列処理(MPP)データベースエンジンです。Impalaには、クラスター内の特定のホストに分散されたコアのImpaladプロセスが1つだけあります。

インパラドはインパラのデーモンであり、インパラの中核コンポーネントとして、次の重要な機能を持っています。

  1. データファイルの読み取りと書き込み。
  2. impalaシェルコマンド、Hue、JDBCまたはODBCから送信されたクエリを受け入れます。
  3. クエリを並列化し、クラスター間で作業を分散します。
  4. 中間クエリ結果を中央コーディネーターに送信します。

インパラドは、次の方法で展開できます。

  1. hdfsとimpalaが同じクラスターにある場合、impaladとDataNodeは同じマシンにデプロイされます。
  2. Impalaはコンピューティングクラスタに個別にデプロイされ、HDFS、S3、ADLなどからリモートでデータを読み取ります。

ImpaladはStateStoreと継続的に通信して、どのデーモンが正常で、新しいタスクを受け入れることができるかを確認します。また、Impalaクラスター内のデーモンがデータベースまたはテーブルを作成、変更、または削除するか、Impalaを介してINSERTまたはLOAD DATAステートメントを実行する限り、カタログ化されたプロセス(Impala 1.2で導入)からブロードキャストメッセージを受け取ります。Catalogedはメタデータ情報をREFRESHまたはINVALIDATEします。Impala 1.2以前は、メタデータはImpalaデーモン間で調整されていました。

ステートストア

StateStoreコンポーネントは、クラスター内のすべてのImpalaデーモンの実行ステータスをチェックし、その結果を継続的に各デーモンに渡すために使用されます。

ハードウェア障害、ネットワークエラー、ソフトウェアの問題、またはその他の理由でimpaladが失敗した場合、StateStoreは他のすべてのImpaladプロセスに通知し、その後のクエリで、アクセスできないImpaladプロセスへの要求を回避できます。

カタログ

カタログコンポーネントは、メタデータの変更をクラスター内のインパラドプロセスに送信するために使用され、catalogdと呼ばれるデーモンによって表されます。このサービスは1台のマシンでのみ開始する必要があります。リクエストはStateStoreプロセスを介して渡されるため、カタログとStateStoreは同じマシンで実行する必要があります。

--load_catalog_in_background オプションは、テーブルのメタデータがロードされるタイミングを制御できます。

  • に設定するfalseと、テーブルが最初に参照されたときにテーブルのメタデータが読み込まれます。つまり、最初の実行が遅くなる可能性があります。Impala 2.2以降、デフォルト  --load_catalog_in_background値はfalseです。
  • に設定するtrueと、クエリにメタデータが必要ない場合でも、カタログサービスはテーブルのメタデータをロードしようとします。したがって、メタデータを必要とする最初のクエリを実行すると、メタデータは既に読み込まれている可能性があります。ただし、次の理由により、オプションをに設定しないことをお勧めしますtrue
    • バックグラウンドの読み込みは、クエリのメタデータの読み込みを妨げる可能性があります。たとえば、起動時またはメタデータの無効化後に、クエリに必要なメタデータがロードされていないか、削除されている可能性があります。その期間はメタデータの量に依存し、ランダムにクエリの実行時間が長くなる可能性があり、診断が困難です。
    • Impalaは、決して使用できないテーブルのメタデータをロードする場合があり、それによってカタログサイズが増加し、それによってカタログサービスとImpaladのメモリ使用量が増加する場合があります。

 

おすすめ

転載: blog.csdn.net/x950913/article/details/108474866