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