Spark ステージの高 I/O
次に、最も長いステージの I/O 統計をもう一度確認します。
高 I/O とは
高いと見なされるためには、I/O 列にどのくらいのデータが必要でしょうか? これを理解するには、まず、指定された列の中で最も大きい数値から始めます。 次に、すべてのワーカーに対して持っている CPU コアの合計数を検討します。 通常、各コアは 1 秒あたり約 3 MB の読み取りと書き込みを行うことができます。
最大の I/O 列をクラスター ワーカー コアの数で除算し、それを期間 (秒) で除算します。 結果が約 3 MB の場合は、おそらく I/O バウンドの状態です。 これが高い I/O になります。
高入力
ステージに多くの入力が表示される場合は、データの読み取りに多くの時間を費やしていることを意味します。 まず、このステージで読み取っているデータを特定します。 Spark の DAG での高価な読み取りの識別に関する説明を参照してください。
特定のデータを識別した後、読み取りを高速化するための方法をいくつか次に示します。
- Delta を使用します。
- Photon を試します。 これは、特に幅の広いテーブルの場合に、読み取り速度に大いに役立つ可能性があります。
- クエリの選択性を高めて、できるだけ多くのデータを読み取る必要がないようにします。
- データのスキップがより効果的になるように、データ レイアウトを再考します。
- 同じデータを複数回読み取る場合は、Delta キャッシュを使用します。
- 結合を行っている場合は、DFP の使用を検討します。
高出力
ステージからの出力が多い場合は、データの書き込みに多くの時間が費やされていることを意味します。 これを解決するためのいくつかの方法を次に示します。
- 大量のデータを書き直していますか? Spark がデータを書き直しているかどうかを確認する方法を参照してください。 大量のデータを書き直している場合は次を実行します。
- 最適化が必要なマージがあるかどうかを確認します。
- Parquet ファイルを書き換えずに既存の行を削除または変更済みとしてマークするには、削除ベクトルを使用します。
- Photon がまだ有効になっていない場合は有効にします。 Photon は書き込み速度に大いに役立つ可能性があります。
高シャッフル
シャッフルに慣れていない場合は、ここで学習します。
高 I/O なし
どの列にも高い I/O が表示されない場合は、さらに詳しく調べる必要があります。 I/O が少ない低速 Spark ステージの説明を参照してください。