Sparkステージ高I/O
次に、最も長いステージの I/O 統計をもう一度見ます。
高 I/O とは
I/O列を高いと見なすには、どのくらいのデータが必要ですか? これを理解するには、まず、指定された列のいずれかで最大の数値から始めます。 次に、すべてのワーカー全体の CPU コアの合計数を考慮します。 通常、各コアは毎秒約 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 ステージを参照してください。