Spark&Flink Online 10)Catalyst OptimizerとTungsten Projectによるリアルタイムビッグデータ処理


Spark Backend


CatalystとTungstenの2つのバックエンド最適化

Two Engines of Spark

  • スパークライン2つのエンジンを使用してクエリーを回転
  • Catalyst
  • Tungsten
  • Catalyst一目瞭然

  • SQLとDataFrameモジュール
  • 、構造化データをサポート

    Catalystの仕事

  • 論理平面を物理平面に変換

  • 解析:DataFrameオブジェクトの関係を計算し、列のタイプと名前を決定します.

  • ろんりへいめんさいてきか
    Compile Timeにおける
  • 定数表現の計算式(x runtime)
  • Predicate Pushdown: join & filter -> filter & join
  • 投影実行:
  • 計算に必要な列のみインポート

  • 物理平面の作成:Sparkを実行可能平面に変換する

  • コードダウングレード:Java Bytecodeを使用して物理計画を最適化する
  • 論理平面とは?

  • が実行する必要があるすべての変換ステップの抽象
  • のデータがどのように変化するかを定義しますが、
  • 実際にどこでどのように動作するかは定義されていません
  • 物理計画とは?

  • 論理平面がクラスタ上でどのように動作するかを定義します.
  • 実行ポリシーを策定し、Costモデルに基づいて
  • を最適化

    論理計画の最適化

    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

  • spark.sql(query).explain(True)
  • Parsed Logical Plan
  • Analyzed Logical Plan
  • Optimized Logical Plan
  • Physical Plan
  • 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

  • 物理平面を選択すると、分散環境で実行されるBytecodeが作成されます.このプロセスは、コード生成
  • と呼ばれます.
  • エンジンの性能向上を目的とする
  • メモリ管理最適化
  • キャッシュによる演算
  • コード
  • を生成する.

    Summary

  • catalyst Optimizer
  • Explainチェック実行プラン
  • を使用
  • Tungsten