フローは次のようになります。
ステップ 1 : Hive クライアントがクエリをトリガーします (CLI、または JDBC、ODBC、Thrift、または webUI を使用する外部クライアント)。
ステップ 2 : コンパイラがクエリを受け取り、メタストアに接続します。
ステップ 3: コンパイル フェーズの開始。
Parser
クエリをparse tree
表現に変換します。ANTLRを使用して生成されabstract syntax tree(AST)
ます。
Semantic analyzer
コンパイラは、入力テーブルと出力テーブルのメタストアによって提供される情報に基づいて論理プランを構築します。コンパイラもこの段階でチェックtype compatibilities
して通知します。compile-time semantic errors
QBT creation
このステップでは、AST から と呼ばれる中間表現への変換が行われquery block(QB) tree
ます。
Logical plan generator
このステップで、コンパイラはセマンティック アナライザーからの論理プランを操作の論理ツリーに書き込みます。
Optimization
DAG optimizations
これは、一連の全体がこのフェーズで行われるため、コンパイル フェーズの最も重い部分です。次のタスクが含まれます。
Logical optimization
Column pruning
Predicate pushdown
Partition pruning
Join optimization
Grouping(and regrouping)
Repartitioning
Conversion of logical plan into physical plan by physical plan generator
Creation of final DAG workflow of MapReduce by physical plan generator
ステップ 4: 実行エンジンがコンパイラ出力を取得して、Hadoop プラットフォームで実行します。次のタスクが含まれます。
MapReduce タスクは、最初に計画のその部分を plan.xml ファイルにシリアル化します。
次に、plan.xml ファイルがタスクのジョブ キャッシュに追加され、Hadoop を使用して ExecMapper と ExecReducer のインスタンスが生成されます。
これらの各クラスは、plan.xml ファイルを逆シリアル化し、タスクの関連部分を実行します。
最終結果は一時的な場所に保存され、クエリ全体が完了すると、挿入またはパーティションの場合は結果がテーブルに移動されます。それ以外の場合は、一時的な場所で呼び出しプログラムに返されます。
注 : すべてのタスクは、依存関係の順序で実行されます。それぞれは、すべての前提条件が実行された場合にのみ実行されます。
metastore テーブルとそのフィールドについて知るには、 metastore の MR ダイアグラムを参照してください。
HTH