0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS AnalyticsAdvent Calendar 2023

Day 24

Glue コンソールから Spark UI で処理が分散できているか見てみる

Last updated at Posted at 2023-12-24

はじめに

そろそろ2023年も終わりますね。今年も様々なAWSサービスのアップデートがあったと思います。皆さんは何が印象に残っているでしょうか。
私が印象に残ったアップデートの一つに、「GlueのコンソールからSpark UIが見れるようになった」ことがあります。

これが出るまでは、CloudFormationは公式から提供されてはいますが、自分自身でEC2上にSpark UIのサーバーを建てる必要がありました。

Spark UI とは

Spark UIは、Glue ETLジョブの内部で実行されている処理を可視化してくれるツールです。
Sparkは、大規模データを処理するために分散して処理を行います。その分散具合やそれぞれの処理時間などが見れるようになるため、パフォーマンスチューニングに利用されます。

image.png

image.png

今回試すこと

まずは、ワーカー数を2にしてGlue ETLジョブを実行します。
その実行内容をSpark UIで確認し、ワーカー数をどのように増やせば効率的に処理が出来るかを考えたいと思います。

Glueのワーカー数というのは、分散の度合いのようなものです。
以下の図が分かりやすいですが、ワーカータイプがG.1Xであれば、1つのワーカーにつき1DPU、1Executorです。Executorというのが処理するマシンに相当するため、ワーカー数が10なら10個のマシンで並列処理するイメージです。
ただ、10個のうち1つはDriverという全体の指示係のようなものを担うので、実際に処理を行うのは残りの9個ということになります。
image.png
https://d1.awsstatic.com/webinars/jp/pdf/services/202108_Blackbelt_glue_etl_performance2.pdf より

ワーカー数2の場合

では、まずはワーカー数2(G.1Xでの最低ワーカー数)で実行してみます。

処理の内容

処理はかなり簡単なもので、S3上のcsvデータをロードして、parquetファイルで出力するだけです。
入力のcsvファイルは、1つのcsvファイルで2.2GBです。

image.png

このジョブを実行すると、3分17秒で処理が完了しました。
image.png

結果をSpark UIで見てみる

まずはジョブの結果から View detailsをクリックします。
image.png

下の方にあるSpark UIをクリックするとみることが出来ます。
image.png

以下がSpark UIの画面です。
image.png

さらに、Descriptionを2回クリックしていくと、詳細が見れます。
下の表を見ると、Taskが36個実行されていることが分かります。Sparkでは、処理をTaskという単位まで分解して、それぞれのExecutor上で実行していきます。上の図では緑の帯が36個あり、1つのExecutorで36個のTaskを実行しています。
image.png

image.png

どうすれば効率よく処理が分散する?

ワーカー数が2つだと、36個のTaskを1つのExecutorで実行していました。これを、複数のExecutorで分散処理することを考えます。いくつのExecutorで分散させればよいでしょうか?

まずは1つのExecutorでいくつのTaskが処理できるかを考えると、今回の場合(Glueのバージョン4.0、ワーカータイプG.1X)は4個になります。これは、Executorあたりのコアの数が以下のように4つと指定されているためです。

image.png

つまり、今回の場合は36個のTaskがあるので、36÷4=9個のExecutorを準備出来れば、一番効率よく処理できることになります。ワーカー数で言うと、10を指定すれば良いですね(1つはDriverとなるため)。

Glueのドキュメントによると、ジョブパラメーターの--executor-coresで指定できるようです。8を指定して実行すると、spark.executor.coresも8となりました。

ワーカー数を変更してやってみる

ワーカー数10で実行した場合、このように1分20秒と先ほどの3分17秒よりも実行時間が短縮されています。
image.png

肝心のSpark UIを見てみると、以下のように9個のExexutorできれいに並列処理されていますね!

image.png
image.png

まとめ

  • Sparkのパフォーマンスチューニングに便利なSpark UIが、Glueのコンソールから簡単に見れるようになった。
  • Executor上でTaskがうまく並列処理できていないようなら、ワーカー数を増やすのが良い。
  • ワーカー数をいくつに増やせばよいかは、Task数によって考える。

これ以外にもSparkのパフォーマンスチューニングには色々な種類があるので、Spark UIを色々と見ながら試してみてはいかがでしょうか。

参考

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?