悩むのはもうおしまい!~Azure Synapse Analytics料金試算のすすめ~
2022-12-20
azblob://2022/12/19/eyecatch/2022-12-20-synapse-analytics-cost-000.jpg

こんにちは!新卒の寺田です!
今年も残すところ、10日と少しとなりました。新卒と名乗ることができるのも後3か月という事実に震えています。

今回は個人的にややこしいと感じた、Azure Synapse Analyticsの料金試算についてまとめてみようと思います。

1. 今回まとめる内容

Azure Synapse Analyticsは、専用SQLプールやApache Sparkプール、Data Explorerプール等、数多くの要素が料金に絡んできます。
今回は、その中でも特にややこしく、また必ず利用するといってもいいApache Sparkプールの料金についてまとめていきます。

2. Apache Sparkプールの料金試算

まずは、Microsoft様が提供する料金計算ツールで、Apache Sparkプールの項目を確認してみます。
 

ノードのサイズとインスタンスの数、利用した時間で決まる形になっていますね。
上図を初めてみたとき、「インスタンスってSparkインスタンスのことを指しているのかな?」と私は思いましたが、実際は違います。
上図が示すインスタンスは、ノード数を表しています。

ノード数はAzure Portal上から設定する項目であり、Apache Sparkプールのスケールの設定から設定します。
 

上図を見ていただくとわかる通り、ノード数を設定すると、設定に対して1時間ごとにかかる費用を確認することができます。
ここで確認した費用が、Apache Sparkプールの費用となります。※実際に消費したノード数によって料金が決まるので、設定時点では料金は発生しません。

3. ノード数の設定

ここまで料金算出の流れをご説明しましたが、肝心のノード数はどのように設定すればよいのでしょうか。
実は、Apache Sparkプールの料金算出において、ノード数の算定が最もややこしい部分となります。

ノード数算定で肝要となるのは、実行するPipeline(ノートブック)等で、どれだけのvcoreを同時に必要とするかという点です。※同時という点が重要です。
例えば、下図のような設定のPipelineを実行したいとしましょう。
2つのノートブックはまったく同じ設定です。
 

Executorのサイズ、Executorの数、ドライバーのサイズの3つから計算し、↓のような計算になります。※Executorは、ドライバー用に追加で1つ確保されることに注意してください。

2(Executorの数) * 4vcore(Executorのサイズ) = 8vcore
8vcore + 4vcore(ドライバー用のExecutorのサイズ) = 12vcore

計算の結果、Pipeline実行のために必要なvcoreは12であることがわかりました。
次に、Apache Sparkプールのスケールの設定からノードのサイズを確認します。
 

ノードのサイズはSmall(4vcore)になっていますから、↓の計算となり、必要なノード数は3であることがわかります。

12vcore / 4vcore = 3

ノートブックの処理が終わると、利用されていたノードは他のノートブックで利用できる状態になります。
そのため、1つのノートブックに必要なノードだけを担保すればよいというわけです。

では、下図のようなPipelineだとノード数はどうなるでしょうか。
ノートブック、Apache Sparkプールのスケールの設定は先述の例と全く同じです。
 

上図の場合だと、今度は6ノード必要となります。
先ほどの例は2つのノートブックが順列に実行されていましたが、今度は並列で実行しているため、2倍のノードを必要とするというわけです。

4. まとめ

Apache Sparkプールの料金算出についてまとめてみましたが、いかがだったでしょうか?
ドキュメントを漁り、検証に検証を重ねることで、やっと上記の答えにたどり着くことができました。

私と同じように悩んでいる方に、本記事が届いていると幸いです。