Spark&Flink Online 10)Catalyst OptimizerとTungsten Projectによるリアルタイムビッグデータ処理
Spark Backend
CatalystとTungstenの2つのバックエンド最適化
Two Engines of Spark
Catalyst一目瞭然
Catalystの仕事
解析:DataFrameオブジェクトの関係を計算し、列のタイプと名前を決定します.
ろんりへいめんさいてきか
Compile Timeにおける
物理平面の作成:Sparkを実行可能平面に変換する
コードダウングレード:Java Bytecodeを使用して物理計画を最適化する
論理平面とは?
物理計画とは?
論理計画の最適化 SELECT zone_data.Zone, count(*) AS trips\
FROM trip_data JOIN zone_data \
ON trip_data.PULocationID = zone_data.LocationID \
WHERE trip_data.hvfhs_license_num = 'HV0003' \
Group By zone_data.Zone order by trips desc
Explain
SELECT zone_data.Zone, count(*) AS trips\
FROM trip_data JOIN zone_data \
ON trip_data.PULocationID = zone_data.LocationID \
WHERE trip_data.hvfhs_license_num = 'HV0003' \
Group By zone_data.Zone order by trips desc
Explain SQL練習
Spark.sql("SELECT zone_data.Zone, count(*) AS trips\
FROM trip_data JOIN zone_data \
ON trip_data.PULocationID = zone_data.LocationID \
WHERE trip_data.hvfhs_license_num = 'HV0003' \
Group By zone_data.Zone").explain(True)
まずParsed Logical Planが実行する->ユーザーが書き込んだコードをLogical Planに変換するZoneとtripデータは接続されています.
フィルタリング
暗門となる.
下から下の順に並べる
次の分析を実行する論理平面->ユーザーが指定したテーブルにどの列があるかを確認します
接続とフィルタリング
次に、Optimized Logical Plan->フィルタを実行します.フィルタは1つのテーブルでのみ行われるため、プログラム自体が下にフィルタされます(predicate pushdown?)
最後に、物理計画の実行->より詳細な計画
上記の手順では、joinを実行し続けるだけですが、BrodcastHashJoinを使用してjoinのタイプを選択します.
述語push downとは?
ほとんどのクエリー・エンジンでは、フィルタをできるだけソースに近い場所に適用したいと考えています.ソースに近い位置にフィルタを適用するということは、ファイルシステムからデータを読み込んだ後、メモリからデータをフィルタリングするのではなく、ファイルの読み取りから必要なデータだけを効率的に読み出すということです
ソース:https://jaemunbro.medium.com/apache-spark-partition-pruning%EA%B3%BC-predicate-pushdown-bd3948dcb1b6
以上の手順のPhysical PlanはTungstenに移動します.
Tungsten
Summary
Reference
この問題について(Spark&Flink Online 10)Catalyst OptimizerとTungsten Projectによるリアルタイムビッグデータ処理), 我々は、より多くの情報をここで見つけました https://velog.io/@junsang1203/실시간-빅데이터-처리를-위한-Spark-Flink-Online-10-Catalyst-Optimizer-및-Tungsten-Project-작동원리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol