従来のリレーショナル・データベース、基本的なクエリのSQL projecttion(フィールドA、フィールドB、フィールドC)、データソース(表A)及びfieter(フィールドA> 10)は3つの部分からなります。対応するクエリ処理の結果、データソースと動作をSQL、結果に応じた - >データソース - >次のように動作のシーケンスを説明します。
しかし、実際の実装では、SQL操作に応じた - >データソース - 次のように>これは、実行される構文SQL結果の逆の順序で、特定の実装プロセスです。
1つの構文および字句解析:字句および構文解析記述されたSQL文の(パース)、投影で表現されたSQL文のキーワード(例えば、選択し、そこからなど)での、区別され、そのデータソースなどSQL構文仕様かどうかを決定するために、及び論理的計画を形成すること、です。
2.バインド:SQL文およびデータ辞書データベース(列、テーブル、ビュー、等)に結合(バインド)、関連する突起とデータソース場合などに、それはSQL文を実行することができることを意味します。
3.最適化(最適化):一般的なデータベースは、一般的に実行統計データベースは、これらのプログラムで最適なプランを選択しますいくつかの実行計画を、提供します。
4.実行(実行):前の手順は、最適な実行計画を取得するためには、クエリのデータセットを返すことがあります。
SparkSQL運用アーキテクチャ:
SQLリレーショナルデータベース処理にスパークSQLステートメントと同様の方法、sparksql最初のSQL文が解析される使用(パース)ツリーを形成し、次いで、ルールツリーは、パターンマッチングにより、プロセスの最適化、に結合しました異なる動作を有するノードの異なるタイプ。クエリ解析、結合、最適化及び物理的実行プラン生成プロセスを処理する責任があり、クエリオプティマイザsparksqlその触媒、触媒が最も中央部sparksqlあります。
コアからスパークSQL、触媒、ハイブとハイブ-thriftserver4部品。
- コア:、入力/出力データの処理を担当異なるデータソースからの(などRDD、寄木細工やJSONドキュメントファイル、など)のデータ取得、その後、クエリ結果データフレームに結果を出力します。
- 触媒:、構文解析を含む全体のプロセスのクエリを、取扱結合、最適化、物理的な計画の生成を担当。
- ハイブ:ハイブは、データを処理する責任があります。
- ハイブ-thriftserver:提供クライアントおよびJDBC / ODBCインタフェース。
動作原理原則の分析:
メタデータSesstionCatalog保存1
SQL文を解析することSesstionCatalogはライブラリ名、テーブル名、フィールド、フィールドタイプを含むSesstionCatalogで、初期ますSqlContextのメタデータを、ロードされたSQL文を入力する前に、sparksqlコンテキストを定義SqlContext、初期化が必要です前に。これらのデータは、論理的な計画が結合されていません解決するために使用されます。
2. ANTLRは、結合していない論理的なプランを生成します
Spark2.0バージョンANTLRは、語彙や文法、構文解析を使用してから、ANTLRが結合されていない論理的な計画によって生成されたキーワードによって生成された構文木を構築します。
3.アナライザ結合ロジックプログラム
この段階でAnalyzerはSessionCatalogメタデータバインディング、結合していない論理プログラムは、結合生成ロジックプログラムを解析し、解析ルールを使用しています。
オプティマイザ最適化ロジックプログラムを使用して4
Opetimize(オプティマイザ)とアナライザと同様のアプローチの実装は、ルールの一連のツリーノードを達成するために、ロジックプログラムと表現ルール反復プロセスのために、これらのマージし、最適化を使用して、クラスに定義されています。
SparkPlanner生成された物理的なプログラムの実行可能プログラム
論理変換プログラムの使用を最適化するためSparkPlanner計画戦略、物理的に生成するために実行可能なプログラム。
6. QueryExecution物理的な実行計画