Spark 1.0.0 以降、Spark プロジェクトは、いくつかの例外を除き、セマンティックバージョニングガイドラインに従います。これらの小さな違いは、Spark がマルチモジュールプロジェクトであるという性質によるものです。
各 Spark リリースは、[MAJOR].[FEATURE].[MAINTENANCE] の形式でバージョン管理されます。
新しいコンポーネントが Spark に追加される場合、最初は「アルファ」とマークされることがあります。アルファコンポーネントは上記のガイドラインを遵守する必要はありませんが、可能な限り遵守するよう努めるべきです。「安定」とマークされたら、これらのガイドラインに従う必要があります。
一般に、API とは Spark で文書化されている公開クラスまたはインターフェイスのいずれかを指します。例:ScalaDoc。リリース間のソース互換性とバイナリ互換性の両方を保証するように努めます。
ただし、「開発者 API」および「実験的」な機能であっても、最大限の互換性を維持するように努めます。ユーザーはすべての利用可能な API から最大限の互換性を期待するため、「実験的」としてプロジェクトにマージされたコードは、将来 API を変更する計画がある場合でも、互換性を維持するように努めるべきです。
Spark プロジェクトは、メジャーバージョンであっても、API の破壊や無断での動作変更を避けるように努めます。これは常に可能とは限りませんが、API を破壊することを決定する前に、以下の要因のバランスを考慮する必要があります。
API を破壊することは、Spark のユーザーにとって常にかなりのコストがかかります。API が破壊されると、Spark プログラムはアップグレードする前に書き直す必要があります。ただし、コストを検討する際にはいくつかの考慮事項があります。
API は Spark にどのくらい前から存在しますか?
API は基本的なプログラムでも一般的ですか?
JIRA やメーリングリストで最近の質問をどのくらいの頻度で見かけますか?
StackOverflow やブログにどのくらいの頻度で登場しますか?
破壊後の動作 - 今日動作するプログラムは、破壊後にどのように動作しますか?以下は、深刻度の順に並べられています。
コンパイラまたはリンカエラーが発生しますか?
実行時例外が発生しますか?
かなりの処理が完了した後で例外が発生しますか?
異なる結果をサイレントに返しますか?(デバッグが非常に困難で、気づかない可能性もあります!)
もちろん、上記のことは、私たちが**決して****いずれか**の API を破壊しないという意味ではありません。問題の API を維持するプロジェクトとユーザー双方のコストも考慮する必要があります。
プロジェクトコスト - 私たちが持つすべての API はテストされ、プロジェクトの他の部分が変更されても機能し続ける必要があります。これらのコストは、外部依存関係(JVM、Scala など)が変更されると大幅に増幅されます。場合によっては、技術的に完全に不可能ではないとしても、特定の API を保守するコストが高くなりすぎる可能性があります。
ユーザーコスト - API には、Spark を学習したり、Spark プログラムを理解しようとしたりするユーザーにとって、認知的なコストもあります。問題の API に曖昧または未定義のセマンティクスがある場合、このコストはさらに高くなります。
「悪い API」があるが、削除のコストも高い場合、既存のユーザーを傷つけることなく、保守コストの一部に対処できる代替手段を検討する必要があります。
悪い API の回避 - これは少し明白ですが、重要な点です。Spark に新しいインターフェイスを追加する際には、この API に永遠に縛られる可能性があることを考慮する必要があります。新しい API が既存の API とどのように関連するか、またそれらが時間とともにどのように進化すると予想されるかを深く考えてください。
非推奨警告 - すべての非推奨警告は、明確な代替手段を指す必要があり、単に API が非推奨であることを示すだけではいけません。
更新されたドキュメント - ドキュメントは、特定のタスクを実行するための「最良」の推奨方法を指す必要があります。レガシー ドキュメントを維持する場合、新しい API を明確に指し、ユーザーに「正しい」方法を提案する必要があります。
コミュニティ活動 - 多くの人がブログや StackOverflow などのサイトを読むことで Spark を学習します。しかし、これらのリソースの多くは時代遅れです。最終的に非推奨の API を削除するコストを削減するために、それらを更新してください。
ブランチは毎年 1 月と 7 月にカットされるため、機能(「マイナー」)リリースは一般的に約 6 か月ごとに行われます。したがって、Spark 2.3.0 は通常 2.2.0 の約 6 か月後にリリースされます。メンテナンスリリースは、機能リリースの間に必要に応じて行われます。メジャーリリースは固定スケジュールでは行われません。
| 日付 | イベント |
|---|---|
| 2025 年 1 月 15 日 | コードフリーズ。リリースブランチのカット。 |
| 2025 年 2 月 1 日 | QA 期間。バグ修正、テスト、安定性、ドキュメントに注力。一般的に、新しい機能はマージされません。 |
| 2025 年 2 月 15 日 | リリース候補 (RC)、投票など。最終リリースが成功するまで。 |
機能リリースブランチは、一般的に 18 か月間、バグ修正リリースで保守されます。たとえば、ブランチ 2.3.x は、2018 年 2 月の 2.3.0 リリースから 18 か月後の 2019 年 9 月をもって保守されなくなりました。それ以降、バグ修正であっても 2.3.x リリースは期待されるべきではありません。
メジャーリリース内の最後のマイナーリリースは、通常、「LTS」リリースとしてより長く保守されます。たとえば、3.5.0 は 2023 年 9 月 13 日にリリースされ、31 か月後の 2026 年 4 月 12 日まで保守されます。