本文檔的目的是將Hadoop 相容性指南提煉成與系統管理員相關的資訊。
目標受眾是負責維護 Apache Hadoop 集群且必須規劃和執行叢集升級的管理員。
Hadoop 開發社群會定期推出新的 Hadoop 版本,以引入新功能並修正現有問題。版本分為三種類別
Hadoop 所依賴的原生元件組成套件被視為 Hadoop ABI 的一部分。Hadoop 開發社群致力於盡可能地維護 ABI 相容性。在次要版本之間,Hadoop 原生相依性的最低支援版本號碼不會增加,除非必要,例如安全性或授權問題。當發生此類變更時,Hadoop 開發社群會嘗試保留相同的主要版本,只更新次要版本。
Hadoop 依賴於 Java 虛擬機器。JVM 的最低支援版本不會在 Hadoop 的主要版本之間變更。如果在主要版本之間,目前的最低支援 JVM 版本不再受支援,則最低支援 JVM 版本可能會在次要版本中變更。
Hadoop 依賴於某些傳輸層技術,例如 SSL。這些相依性的最低支援版本不會增加,除非必要,例如安全性或授權問題。當發生此類變更時,Hadoop 開發社群會嘗試保留相同的主要版本,只更新次要版本。
Hadoop 的服務埠號碼在主要版本中會保持相同,但在主要版本中可能會變更。
Hadoop 的內部線路協定將在相同主要版本內的次要版本之間保持向後和向前相容,無論是在客戶端和伺服器之間,還是在伺服器之間,目的是啟用滾動升級。線路協定的向前和向後相容性在主要版本之間是可能的,並可能允許在特定條件下進行滾動升級,但無法保證。
Hadoop REST API 提供一個簡單的機制,用於收集 Hadoop 系統狀態的資訊。為了支援 REST 客戶端,Hadoop REST API 會進行版本控制,且在同一個版本中不會進行不相容的變更。端點本身以及支援的參數清單和端點的輸出都禁止在 REST 端點版本中進行不相容的變更。但是請注意,新增欄位和其他附加變更被視為相容的變更,因此 REST API 的任何使用者都應具備足夠的彈性來忽略未知的欄位。
REST API 版本只有一個數字,且與 Hadoop 版本號碼無關。版本號碼會編碼在以「v」為字首的端點 URL 中,例如「v1」。新的 REST 端點版本只能在次要版本或主要版本中推出。REST 端點版本只能在標示為已棄用一個完整的次要版本後才能移除。
Hadoop 會產生各種輸出,這些輸出可以由自動化工具剖析。在使用 Hadoop 的輸出時,請考慮下列事項
Hadoop 的 CLI 組合提供了管理系統各個層面的功能,以及發現系統狀態資訊的功能。在主要版本之間,不會移除或語意變更任何 CLI 工具選項。此規則的例外情況是明確標示為實驗性質且可能變更的 CLI 工具和工具選項。除非另有記載,否則 CLI 工具的輸出也會在主要版本號碼中保持不變。
請注意,任何對 CLI 工具輸出的變更都被視為不相容的變更,因此在主要版本之間,CLI 輸出不會變更。請注意,CLI 工具輸出與 CLI 工具產生的記錄輸出不同。記錄輸出不適用於自動化使用,且可能隨時變更。
Hadoop 顯示的 Web UI 僅供人類使用。不支援刮取 UI 以取得資料。不會做出任何努力來確保各個 Web UI 在不同版本中顯示的資料之間有任何相容性。
Hadoop 的內部系統狀態是私密的,不應直接修改。下列政策規範各種內部狀態儲存的升級特性
Hadoop 使用兩種主要形式的組態檔案:XML 組態檔案和記錄組態檔案。
XML 組態檔案包含一組屬性,以名稱/值對表示。屬性的名稱和意義由 Hadoop 定義,並保證在小版本之間保持穩定。屬性只能在主要版本中移除,而且僅在已標記為至少一個完整主要版本的已棄用時才能移除。大多數屬性都有預設值,如果屬性未在 XML 組態檔案中明確設定,將會使用此預設值。在維護版本期間,預設屬性值不會變更。有關各種 Hadoop 元件支援的屬性的詳細資訊,請參閱元件文件。
下游專案和使用者可以將自己的屬性加入 XML 組態檔中,供其工具和應用程式使用。雖然 Hadoop 沒有對定義新屬性做出正式限制,但與 Hadoop 定義的屬性衝突的新屬性可能會導致意外且不理想的結果。建議使用者避免使用與 Hadoop 定義屬性的命名空間衝突的客製組態屬性名稱,因此應避免使用 Hadoop 使用的任何前綴,例如 hadoop、io、ipc、fs、net、file、ftp、kfs、ha、file、dfs、mapred、mapreduce 和 yarn。
Hadoop 程式和 CLI 產生的記錄輸出受一組組態檔控制。這些檔案控制 Hadoop 各種元件輸出的記錄訊息的最低層級,以及這些訊息的儲存位置和方式。在次要版本之間,不會對記錄組態進行任何變更,以減少、消除或重新導向記錄訊息。
Hadoop 使用多種其他類型的組態檔,格式各異,例如 JSON 資源設定檔組態或 XML 公平排程器組態。在次要版本中,不會對組態檔格式引入不相容的變更。即使在次要版本之間,如果可能,也會避免不相容的組態檔格式變更。
Hadoop 組態檔、作業歷程資訊(作業歷程伺服器使用)和 Hadoop 產生的記錄檔的位置和一般結構將在維護版本中維持不變。
Hadoop Distribution 的內容,例如 JAR 檔案,可能會隨時變更,不應視為可靠,但客戶端人工製品除外。客戶端人工製品及其內容在主要版本中將保持相容性。Hadoop 開發社群的目標是讓應用程式程式碼在次要版本中繼續保持不變,並在可能的情況下在主要版本中保持不變。目前的客戶端人工製品清單如下
有些 Hadoop 元件會透過環境變數接收資訊。例如,HADOOP_OPTS
環境變數會由大部分 Hadoop 程序解譯為啟動新的 JVM 時要使用的其他 JVM 參數字串。在次要版本之間,Hadoop 解譯環境變數的方式不會以不相容的方式變更。換句話說,放入相同變數的相同值,在同一個主要版本中的所有 Hadoop 版本都應該會產生相同的結果。
Hadoop 仰賴大量的第三方函式庫才能運作。Hadoop 開發人員社群盡可能地將這些相依性隱藏起來,不讓下游開發人員看到。儘管如此,Hadoop 確實會公開一些相依性,特別是在 Hadoop 3 之前。Hadoop 透過主要版本之間的用戶端人工製品公開的新相依性不會再有。
常見的下游反模式是使用 hadoop classpath
的輸出設定下游應用程式的 classpath,或將所有包含在 Hadoop 中的第三方 JAR 檔案加入下游應用程式的 classpath。這種做法會在下游應用程式和 Hadoop 的第三方相依性之間建立緊密的關聯,導致應用程式脆弱,難以在 Hadoop 的相依性變更時維護。強烈建議不要採用這種做法。
Hadoop 也包含多個原生元件,包括壓縮、容器執行器二進位檔,以及各種原生整合。這些原生元件為 Hadoop 引入了原生相依性。原生相依性可能會在次要版本中變更,但 Hadoop 開發人員社群會盡可能地將相依性版本變更限制在次要版本變更。
Hadoop 目前由 Hadoop 開發人員社群在執行於 x86 和 AMD 處理器的 Linux 和 Windows 上提供支援。這些作業系統和處理器很可能會在可預見的未來持續獲得支援。如果支援計畫有所變更,將會標示要捨棄的作業系統或處理器,並在實際捨棄之前,至少在一個完整的次要版本(理想情況下是一個完整的次要版本)中標示為已棄用。Hadoop 可以在其他作業系統和處理器架構上運作,但社群可能無法在發生問題時提供協助。
無法保證 Hadoop 守護程式所需的最低資源在版本(甚至是維護版本)之間會如何變更。儘管如此,Hadoop 開發人員社群會盡量避免在次要版本中增加需求。
Hadoop 支援的任何檔案系統(例如透過 FileSystem API)在大部分情況下會在整個主要版本中持續獲得支援。唯一會在主要版本中捨棄檔案系統支援的情況是,如果提供了乾淨的遷移路徑到其他用戶端實作。
對於開發針對 Apache Hadoop 的應用程式和專案的問題,請聯絡 使用者郵件清單。