Apache Hadoop 發行版本管理

背景

Apache Hadoop 使用 <major>.<minor>.<maintenance> 的版本格式,其中每個版本元件都是一個數字值。版本也可以有額外的後綴,例如 "-alpha2""-beta1",表示 API 相容性保證和發行的品質。我們使用 “a.b.c”“x.y.z” 表示點分版本三元組。

主要版本用於引入大幅度的、潛在不相容的變更。這方面的範例包括在 Hadoop 2 中以 YARN 和 MapReduce 2 取代 MapReduce 1,以及在 Hadoop 3 中將 Java 執行時間版本從 JDK7 變更為 JDK8。

次要版本用於在主要發行版本中引入新的相容功能。

維護版本包括錯誤修正或低風險的可支援性變更。

Hadoop 的版本管理架構多年來不斷演進。從 0.20.2 到 1.y 發行的早期階段出現了 許多具有不同功能集的並行發行。發行活動在 2.y 發行時代初期合併,從 2.0.0 到 2.7.0 的發行大多是線性遞增。

然而,2.6.z 和 2.7.z 的持續維護重新在 Hadoop 中引入了並行的活動發行版本。2.8.z 和 3.0.z 發行的其他計畫表示可能有四個活動發行版本,這使得必須釐清 Hadoop 版本管理,以及它如何影響這些並行的發行分支。

版本管理規則

為了建立共同的知識基礎,我們在發行版本方面要求下列事項。

這表示新的主要版本必須與前一個次要版本協調。新的次要版本和維護版本只需要在其版本線中協調。

「-alphaX」「-betaX」後綴版本可以視為 a.b.c 版本,第一個(例如「-alpha1」)為 a.b.0 版本。

在設定修正版本時,此政策由下列規則組編碼

  1. 對於每個次要版本線,設定最低未發佈的 a.b.c 版本,其中 c ≥ 0
  2. 對於每個主要版本線,設定最低未發佈的 a.b.0 版本

範例

例如,截至 2016 年 8 月 3 日,2.6.x 和 2.7.x 線中最新版本為 2.6.4 和 2.7.2。我們也已為規劃中的未來版本建立下列分支:branch-2.7.3、branch-2.8 和 branch-3.0.0-alpha1。

如果我們提交一個預計會發佈至 2.6.5 版本的錯誤修正,我們會提交至

  1. trunk (3.0.0-alpha2)
  2. branch-3.0.0-alpha1 (3.0.0-alpha1)
  3. branch-2 (2.9.0)
  4. branch-2.8 (2.8.0)
  5. branch-2.7 (2.7.4)
  6. branch-2.7.3 (2.7.3)
  7. branch-2.6 (2.6.5)

套用上述設定修正版本的規則

  1. 規則 1:2.6.z 和 2.7.z 都是次要版本線,因此設定2.6.52.7.3
  2. 規則 2:2.y.z 和 3.y.z 是主要版本線,因此設定2.8.03.0.0-alpha1

請注意,在回傳變更時,我們總是會確保回傳至版本線中下一個較高的版本。例如,在回傳至 branch-2.7.3 (2.7.3) 時,我們會確保回傳至 branch-2.7 (2.7.4);在回傳至 branch-2.8 (2.8.0) 時,我們會確保回傳至 branch-2 (2.9.0)。這會保留版本的單調性。