Spark 1.0.0以降、Sparkプロジェクトは、いくつかの例外を除いて、セマンティックバージョニングのガイドラインに従います。これらの小さな違いは、Sparkが多モジュールプロジェクトであるという性質を考慮したものです。
各Sparkリリースは次のようにバージョン管理されます: [メジャー].[機能].[メンテナンス]
新しいコンポーネントがSparkに追加されると、最初は「アルファ」とマークされる場合があります。アルファコンポーネントは上記のガイドラインに従う必要はありませんが、可能な限り最大限に従うようにしてください。「安定版」とマークされると、これらのガイドラインに従う必要があります。
APIとは、Sparkで公開されている、「開発者API」または「実験的」とマークされていないすべてのパブリッククラスまたはインターフェースです。リリースAは、リリースAに対してコンパイルされたコードがリリースBに対して*クリーンにコンパイルされる*場合、リリースBとAPI互換性があります。現在、バージョンAにリンクされているコンパイル済みアプリケーションが、再コンパイルせずにバージョンBにクリーンにリンクすることを保証するものではありません。リンクレベルの互換性は、将来のリリースで保証しようとしているものです。
ただし、「開発者API」および「実験的」な機能であっても、最大限の互換性を維持するよう努めていることに注意してください。ユーザーは利用可能なすべてのAPIから最大限の互換性を期待しているため、後でAPIを変更する予定がある場合、コードを「実験的」としてプロジェクトにマージしないでください。
Sparkプロジェクトは、メジャーバージョンであっても、APIを破壊したり、動作をサイレントに変更したりすることを避けるよう努めています。これは常に可能とは限りませんが、APIを破壊することを選択する前に、以下の要素のバランスを考慮する必要があります。
APIを破壊することは、ほとんどの場合、Sparkのユーザーにとって些細なコストではありません。APIが壊れているということは、Sparkプログラムをアップグレードする前に書き直す必要があることを意味します。ただし、コストがどうなるかを考える際に、いくつかの考慮事項があります。
APIはSparkにどれくらい前から存在していますか?
APIは基本的なプログラムでも一般的ですか?
JIRAまたはメーリングリストで最近の質問がどれくらいの頻度で見られますか?
Stack Overflowやブログにどれくらいの頻度で表示されますか?
**破壊後の動作** - 現在機能しているプログラムは、破壊後にどのように動作しますか?以下は、重大度の低い順に大まかにリストされています
コンパイラまたはリンカーエラーが発生しますか?
ランタイム例外が発生しますか?
かなりの処理が行われた後にその例外が発生しますか?
異なる答えを黙って返しますか?(デバッグが非常に難しく、気付かない可能性もあります!)
もちろん、上記は**決して** **いかなる** APIも破壊しないという意味ではありません。問題のAPIを維持することのプロジェクトとユーザーの両方へのコストも考慮する必要があります。
プロジェクトコスト - 私たちが持っているすべてのAPIはテストする必要があり、プロジェクトの他の部分が変更されても動作し続ける必要があります。これらのコストは、外部依存関係(JVM、Scalaなど)が変更されると大幅に増加します。場合によっては、技術的に完全に不可能ではないにしても、特定のAPIを維持するコストが高すぎる可能性があります。
ユーザーコスト - APIには、Sparkを学習したり、Sparkプログラムを理解しようとするユーザーにとって認知コストもかかります。問題のAPIのセマンティクスが混乱したり未定義である場合、このコストはさらに高くなります。
「悪いAPI」があるが、削除のコストも高い場合は、既存のユーザーに悪影響を与えることなく、メンテナンスコストの一部に対処できる代替案を検討する必要があります。
悪いAPIを避ける - これは少し明白ですが、重要な点です。Sparkに新しいインターフェースを追加するたびに、このAPIに永遠に縛られる可能性があることを考慮する必要があります。新しいAPIが既存のAPIとどのように関連しているか、また時間の経過とともにどのように進化するかを深く考えてください。
廃止警告 - すべての廃止警告は明確な代替手段を示している必要があり、APIが廃止されたとだけ言ってはいけません。
ドキュメントの更新 - ドキュメントは、特定のタスクを実行するための推奨される「最良の」方法を示している必要があります。レガシードキュメントを維持する場合、新しいAPIを明確に示し、ユーザーに「正しい」方法を提案する必要があります。
コミュニティ活動 - 多くの人はブログやStack Overflowなどの他のサイトを読んでSparkを学びます。ただし、これらのリソースの多くは古くなっています。廃止されたAPIを最終的に削除するコストを削減するために、それらを更新してください。
ブランチは毎年1月と7月にカットされるため、機能(「マイナー」)リリースは、一般的に約6か月ごとに行われます。したがって、Spark 2.3.0は、一般的に2.2.0の約6か月後にリリースされます。メンテナンスリリースは、機能リリースの間に必要に応じて行われます。メジャーリリースは、固定スケジュールに従って行われるわけではありません。
日付 | イベント |
---|---|
2023年7月16日 | コードフリーズ。リリースブランチカット。 |
2023年7月下旬 | QA期間。バグ修正、テスト、安定性、ドキュメントに焦点を当てます。一般的に、新しい機能はマージされません。 |
2023年8月 | リリース候補(RC)、投票など、最終リリースが合格するまで |
機能リリースブランチは、一般的に、18か月間バグ修正リリースで維持されます。たとえば、ブランチ2.3.xは、2018年2月に2.3.0がリリースされてから18か月後の2019年9月以降、保守対象と見なされなくなりました。その時点以降、バグ修正であっても、2.3.xリリースは期待されなくなりました。
メジャーリリース内の最後のマイナーリリースは、通常、「LTS」リリースとしてより長く維持されます。たとえば、2.4.0は2018年11月2日にリリースされ、2021年5月に2.4.8がリリースされるまで31か月間維持されていました。2.4.8は最後のリリースであり、バグ修正であっても2.4.xリリースはこれ以上期待されません。