HBase版本號和兼容性

2018-02-26 16:53 更新

HBase版本號和兼容性

HBase 有兩種版本控制方案,分別是:pre-1.0 和 post-1.0。在本節(jié)內(nèi)容中將作出詳細(xì)的說明。

HBase post-1.0

從 1.0.0 版本開始,HBase 正在致力于 Semantic Versioning 的發(fā)布版本。綜上所述:

對于給定的版本號 MAJOR.MINOR.PATCH,增加如下內(nèi)容:

  • MAJOR 版本,當(dāng)你進(jìn)行不兼容的 API 更改時
  • MINOR 版本,當(dāng)您以向后兼容的方式添加功能時
  • PATCH 版本,當(dāng)您進(jìn)行向后兼容的錯誤修復(fù)時
  • 預(yù)發(fā)布和構(gòu)建元數(shù)據(jù)的其他標(biāo)簽可作為MAJOR.MINOR.PATCH格式的擴(kuò)展。

兼容性維度:

除了通常的 API 版本考慮之外,HBase 還有其他需要考慮的兼容性維度。

Client-Server 線協(xié)議兼容性:

  • 允許不同步更新客戶端和服務(wù)器。
  • 我們只能允許先升級服務(wù)器。也就是說,服務(wù)器將向后兼容舊客戶端,這樣新的 API 就可以使用。
  • 示例:用戶應(yīng)該能夠使用舊客戶端連接到升級的群集。

Server-Server 協(xié)議兼容性:

  • 不同版本的服務(wù)器可以共存于同一個群集中。
  • 服務(wù)器之間的有線協(xié)議是兼容的。
  • 分布式任務(wù)的工作人員(如復(fù)制和日志拆分)可以共存于同一個群集中。
  • 相關(guān)協(xié)議(如使用ZK進(jìn)行協(xié)調(diào))也不會改變。
  • 示例:用戶可以執(zhí)行滾動升級。

文件格式兼容性:

  • 支持文件格式向前和向后兼容
  • 示例:文件、ZK 編碼、目錄布局自動升級為 HBase 升級的一部分。用戶可以降級到舊版本,并且一切都將繼續(xù)工作。

客戶端 API 兼容性:

  • 允許更改或刪除現(xiàn)有的客戶端 API。
  • 在我們更改/刪除主要版本之前,API 需要被棄用。
  • 修補程序(patch)版本中提供的 API 將在所有后續(xù)修補程序版本中提供。但是,可能會添加新的 API,這些 API 在以前的修補程序版本中將不可用。
  • 修補程序版本中引入的新 API 只能以源代碼兼容的方式添加:即實現(xiàn)公共 API 的代碼將繼續(xù)編譯。示例:使用新廢用的 API 的用戶不需要使用 HBase API 調(diào)用修改應(yīng)用程序代碼,直到下一個主要版本。*

客戶端二進(jìn)制兼容性:

  • 寫入給定修補程序版本中提供的 API 的客戶端代碼可以運行不變(不需要重新編譯),以抵補新的 jar 后續(xù)補丁版本。
  • 寫入給定修補程序版本中提供的 API 的客戶端代碼可能無法針對早期修補程序版本中的舊 jar 運行。示例:舊編譯的客戶端代碼將在 jar 中保持不變。
  • 如果客戶端實現(xiàn) HBase 接口,則可能需要重新編譯升級到較新的次要(minor)版本。

服務(wù)器端有限的 API 兼容性(取自 Hadoop):

  • 內(nèi)部API被標(biāo)記為“穩(wěn)定(Stable)”,“正在發(fā)展(Evolving)”或“不穩(wěn)定(Unstable)”。
  • 這意味著協(xié)處理器和插件(可插入類,包括復(fù)制)的二進(jìn)制兼容性,只要這些只使用標(biāo)記的接口/類。
  • 例如:舊編譯的協(xié)處理器,過濾器或插件代碼將在新 jar 中保持不變。

相關(guān)性兼容性:

  • HBase 的升級不需要依賴項目的兼容升級,包括運行 Java 時。
  • 示例:Hadoop 的升級不會使我們所做的任何兼容性保證失效。

操作兼容性:

  • 度量標(biāo)準(zhǔn)的更改
  • 服務(wù)的行為變化
  • 通過 /jmx/ 端點公開的 JMX API

概要

  • 修補程序(patch)升級是一種直接替代方案。任何不是 Java 二進(jìn)制和源代碼兼容的更改都將不被允許。在修補程序版本中降級版本可能不兼容。
  • 次要(minor)升級不需要修改應(yīng)用程序/客戶端代碼。理想情況下,這將是一個直接替換,但如果使用新的 jar,則客戶端代碼,協(xié)處理器,過濾器等可能必須重新編譯。
  • 主要(major)升級允許 HBase 做出重大改變。

以下是兼容性矩陣列表:

Major

Minor

Patch

客戶端 - 服務(wù)器線路兼容性

不兼容

兼容

兼容

服務(wù)器 - 服務(wù)器兼容性

不兼容

兼容

兼容

文件格式兼容性

不兼容

兼容

兼容

客戶端API兼容性

不兼容

兼容

兼容

客戶端二進(jìn)制兼容性

不兼容

不兼容

兼容

服務(wù)器端有限的API兼容性

穩(wěn)定性(Stable

不兼容

兼容

兼容

發(fā)展性(Evolving

不兼容

不兼容

兼容

不穩(wěn)定性(Unstable

不兼容

不兼容

不兼容

相關(guān)性兼容性

不兼容

兼容

兼容

操作兼容性

不兼容

不兼容

兼容

HBase 有很多 API 要點,但對于上面的兼容性矩陣,我們區(qū)分了Client API(客戶端 API),Limited Private API(有限的私有 API)和 Private API(私有 API)。

  • InterfaceAudience(javadocs):捕捉預(yù)期的受眾,可能的值包括:
    • Public:對于最終用戶和外部項目是安全的;
    • LimitedPrivate:用于我們期望可插入的內(nèi)部組件,如協(xié)處理器;
    • Private:嚴(yán)格用于 HBase 自身內(nèi)部定義為 IA 的類中,Private 可以用作聲明 IA.LimitedPrivate 接口的參數(shù)或返回值。將IA.Private對象視為不透明;不要嘗試直接訪問其方法或字段。
  • InterfaceStability(javadocs):描述允許接口更改的類型??赡艿闹蛋ǎ?ul>
  • Stable:接口是固定的,預(yù)計不會改變;
  • Evolving:界面可能會在未來的minor 版本中改變;
  • Unstable:界面可能隨時更改

請記住 HBase 項目中 InterfaceAudience 注釋和 InterfaceStability 注釋之間的以下相互作用:

  • IA.Public 類本質(zhì)上是穩(wěn)定的,并堅持我們有關(guān)升級類型(主要,次要或修補程序)的穩(wěn)定性保證。
  • IA.LimitedPrivate 類應(yīng)始終使用給定的 InterfaceStability 值的其中一個進(jìn)行注釋。如果他們不是,你應(yīng)該假定他們是 IS.Unstable。
  • IA.Private 類應(yīng)該被認(rèn)為是隱含不穩(wěn)定的,不能保證發(fā)布之間的穩(wěn)定性。
HBase 客戶端 API

HBase 客戶端 API 由所有標(biāo)記有 InterfaceAudience.Public 接口的類或方法組成。hbase-client 和依賴模塊中的所有主類都有InterfaceAudience.Public,InterfaceAudience.LimitedPrivate或InterfaceAudience.Private標(biāo)記。并非所有其他模塊(hbase-server等)中的類都有標(biāo)記。如果一個類沒有使用上述中的一個注釋,則它被認(rèn)為是一個InterfaceAudience.Private類。

HBase Limited Private API

LimitedPrivate 注釋為接口附帶了一組目標(biāo)使用者。這些使用者是協(xié)處理器,phoenix,復(fù)制端點實現(xiàn)等。此時,HBase 只能保證修補程序版本之間的這些接口的源和二進(jìn)制兼容性。

HBase Private API

所有使用InterfaceAudience.Private注釋的類或沒有注釋的所有類僅在HBase內(nèi)部使用。接口和方法簽名可以隨時改變。如果您依賴于標(biāo)記為Private的特定界面,則應(yīng)打開jira以建議將界面更改為Public或LimitedPrivate,或者為此目的公開的接口。

HBase Pre 1.0

HBase Pre-1.0 版本都是 EOM:對于新的安裝,請勿部署:0.94.y、0.96.y 或 0.98.y,應(yīng)該部署穩(wěn)定的版本。

在語義版本化方案 pre-1.0 之前,HBase 追隨 Hadoop 的 0.2x 或 0.9x 版本。

二進(jìn)制兼容性:

當(dāng)我們說兩個 HBase 版本是兼容的時,我們的意思是這些版本是線(wire)和二進(jìn)制兼容的。兼容的HBase版本意味著客戶可以與兼容但不同版本的服務(wù)器通話。這也意味著你可以換出一個版本的 jar,并用另一個兼容版本的 jar 替換它們,所有的 jar 都可以工作。除非另有說明,否則 HBase 主要的版本都是二進(jìn)制兼容的。您可以安全地在二進(jìn)制兼容版本之間進(jìn)行滾動升級。

滾動升級

滾動升級是您一次更新服務(wù)器群集中的服務(wù)器的過程。如果它們是二進(jìn)制或線路兼容的,則可以跨 HBase 版本進(jìn)行滾動升級。粗略地說,滾動升級是正常地停止每臺服務(wù)器,更新軟件,然后重新啟動。您可以為集群中的每個服務(wù)器執(zhí)行此操作。通常先升級 Master,然后再升級 RegionServers。

例如,下面的 HBase 是 symlinked 實際的 HBase 安裝。在升級之前,在群集上運行滾動重啟之前,我們將 symlink 更改為指向新的 HBase 軟件版本,然后運行:

$ HADOOP_HOME=~/hadoop-2.6.0-CRC-SNAPSHOT ~/hbase/bin/rolling-restart.sh --config ~/conf_hbase

滾動重新啟動腳本將首先正常停止并重新啟動主服務(wù)器,然后依次重新啟動每個 RegionServer。由于 symlink 被更改,所以重新啟動時,服務(wù)器將使用新的HBase 版本。隨著滾動升級的進(jìn)行,檢查日志中是否有錯誤。

在兼容二進(jìn)制/Wire的版本之間進(jìn)行滾動升級:

除非另有說明,否則 HBase 指向的版本是二進(jìn)制兼容的。您可以在 HBase 主要版本之間進(jìn)行滾動升級。例如,您可以通過在集群中進(jìn)行滾動升級,使用0.94.6二進(jìn)制文件替換0.94.5二進(jìn)制文件,從而從 0.94.5 轉(zhuǎn)到 0.94.6。

在次要(minor)版本中,我們調(diào)用的版本是有線/協(xié)議兼容的,在這種情況下,也可以執(zhí)行滾動升級。例如,在從 0.98.x 升級到 HBase 1.0.0 時,我們聲明可以在 hbase-0.98.x 和 hbase-1.0.0 之間進(jìn)行滾動升級。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號