HBase版本號(hào)和兼容性

2018-02-26 16:53 更新

HBase版本號(hào)和兼容性

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

HBase post-1.0

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

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

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

兼容性維度:

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

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

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

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

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

文件格式兼容性:

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

客戶端 API 兼容性:

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

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

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

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

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

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

  • HBase 的升級(jí)不需要依賴項(xiàng)目的兼容升級(jí),包括運(yùn)行 Java 時(shí)。
  • 示例:Hadoop 的升級(jí)不會(huì)使我們所做的任何兼容性保證失效。

操作兼容性:

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

概要

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

以下是兼容性矩陣列表:

Major

Minor

Patch

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

不兼容

兼容

兼容

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

不兼容

兼容

兼容

文件格式兼容性

不兼容

兼容

兼容

客戶端API兼容性

不兼容

兼容

兼容

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

不兼容

不兼容

兼容

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

穩(wěn)定性(Stable

不兼容

兼容

兼容

發(fā)展性(Evolving

不兼容

不兼容

兼容

不穩(wěn)定性(Unstable

不兼容

不兼容

不兼容

相關(guān)性兼容性

不兼容

兼容

兼容

操作兼容性

不兼容

不兼容

兼容

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

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

請(qǐng)記住 HBase 項(xiàng)目中 InterfaceAudience 注釋和 InterfaceStability 注釋之間的以下相互作用:

  • IA.Public 類本質(zhì)上是穩(wěn)定的,并堅(jiān)持我們有關(guān)升級(jí)類型(主要,次要或修補(bǔ)程序)的穩(wěn)定性保證。
  • IA.LimitedPrivate 類應(yīng)始終使用給定的 InterfaceStability 值的其中一個(gè)進(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)記。如果一個(gè)類沒有使用上述中的一個(gè)注釋,則它被認(rèn)為是一個(gè)InterfaceAudience.Private類。

HBase Limited Private API

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

HBase Private API

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

HBase Pre 1.0

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

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

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

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

滾動(dòng)升級(jí)

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

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

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

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

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

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

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

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)