HBase區(qū)域服務(wù)器分配

2018-06-02 15:28 更新

HBase區(qū)域 - 區(qū)域服務(wù)器分配

本節(jié)介紹HBase區(qū)域如何分配給區(qū)域服務(wù)器。

HBase區(qū)域分配啟動

當HBase啟動區(qū)域分配如下(簡短版本)時:

  1. 主機在啟動時調(diào)用AssignmentManager。
  2. AssignmentManager查看hbase:meta中現(xiàn)有的區(qū)域分配。
  3. 如果區(qū)域分配仍然有效(即,如果RegionServer仍處于聯(lián)機狀態(tài)),則將保留分配。
  4. 如果分配無效,則調(diào)用LoadBalancerFactory來分配區(qū)域。負載均衡器(在HBase 1.0中默認StochasticLoadBalancer)將該區(qū)域分配給RegionServer。
  5. hbase:meta使用RegionServer分配(如果需要)和RegionServer啟動代碼(RegionServer進程的開始時間)在RegionServer打開區(qū)域時進行更新。

故障轉(zhuǎn)移

當RegionServer失敗時:

  1. 區(qū)域立即變得不可用,因為RegionServer已關(guān)閉。
  2. 主機將檢測到RegionServer失敗。
  3. 區(qū)域分配將被視為無效,并將像啟動序列一樣被重新分配。
  4. 飛行中的查詢被重新嘗試,并且不會丟失。
  5. 操作在以下時間段內(nèi)切換到新的RegionServer:
    ZooKeeper session timeout + split time + assignment/replay time

區(qū)域負載平衡

區(qū)域可以由LoadBalancer定期移動。

區(qū)域狀態(tài)轉(zhuǎn)變

HBase維持每個區(qū)域的狀態(tài)并在hbase:meta中保持狀態(tài)。該hbase:meta地區(qū)本身的狀態(tài)在ZooKeeper中保存。您可以在Master Web UI中查看轉(zhuǎn)換中的區(qū)域狀態(tài)。以下是可能的區(qū)域狀態(tài)。

可能的區(qū)域狀態(tài):

  • OFFLINE:該區(qū)域處于離線狀態(tài),無法打開
  • OPENING:該區(qū)域正在被打開
  • OPEN:該區(qū)域已打開并且RegionServer已通知主機
  • FAILED_OPEN:RegionServer無法打開該區(qū)域
  • CLOSING:該區(qū)域正在關(guān)閉
  • CLOSED:RegionServer關(guān)閉了該區(qū)域并通知了主機
  • FAILED_CLOSE:RegionServer無法關(guān)閉該區(qū)域
  • SPLITTING:RegionServer通知主機該地區(qū)正在拆分
  • SPLIT:RegionServer通知主機該區(qū)域已完成拆分
  • SPLITTING_NEW:該區(qū)域正在建設(shè)中,正在進行中的拆分
  • MERGING:RegionServer通知主機這個區(qū)域正在與另一個區(qū)域合并
  • MERGED:RegionServer通知主機該區(qū)域已被合并
  • MERGING_NEW:這個區(qū)域是由兩個區(qū)域合并創(chuàng)建的

區(qū)域狀態(tài)轉(zhuǎn)換圖:

HBase區(qū)域服務(wù)器分配

圖表圖例注釋:

  • Brown:離線狀態(tài),一種特殊狀態(tài),可以是暫時的(打開之前關(guān)閉后),終端(已禁用表的區(qū)域)或初始(新創(chuàng)建表的區(qū)域)
  • Palegreen:區(qū)域可以滿足請求的在線狀態(tài)
  • Lightblue:瞬態(tài)狀態(tài)
  • Red:需要OPS注意的失敗狀態(tài)
  • Gold:區(qū)域的終端國家拆分/合并
  • Grey:通過拆分/合并創(chuàng)建的區(qū)域的初始狀態(tài)

過渡狀態(tài)描述:

  1. 主機將區(qū)域從OFFLINE狀態(tài)移動到OPENING狀態(tài)并嘗試將區(qū)域分配給RegionServer。RegionServer可能或可能未收到開放區(qū)域請求。主機會重試將開放區(qū)域請求發(fā)送到RegionServer,直到RPC通過或主機用盡重試。在RegionServer收到開放區(qū)域請求后,RegionServer開始打開該區(qū)域。
  2. 如果主服務(wù)器的重試耗盡,則即使RegionServer正在開始打開區(qū)域,主服務(wù)器也會通過將區(qū)域移至CLOSING狀態(tài)并嘗試關(guān)閉它來阻止RegionServer打開該區(qū)域。
  3. RegionServer打開該區(qū)域后,它將繼續(xù)嘗試通知主服務(wù)器,直到主服務(wù)器將區(qū)域移至OPEN狀態(tài)并通知RegionServer。該地區(qū)現(xiàn)在開放。
  4. 如果RegionServer無法打開區(qū)域,它會通知主人。主服務(wù)器將該區(qū)域移至CLOSED狀態(tài)并嘗試在不同的RegionServer上打開該區(qū)域。
  5. 如果主機無法在某個區(qū)域的任何區(qū)域打開該區(qū)域,則會將該區(qū)域移至FAILED_OPEN狀態(tài),并且在操作員從HBase shell進行干預或服務(wù)器死機之前不會采取進一步的行動。
  6. 主機將區(qū)域從OPEN狀態(tài)移動到CLOSING狀態(tài)。持有區(qū)域的RegionServer可能已經(jīng)或可能未收到關(guān)閉區(qū)域請求。主服務(wù)器重試向服務(wù)器發(fā)送關(guān)閉請求,直到RPC通過或主服務(wù)器用盡重試。
  7. 如果RegionServer未聯(lián)機或拋出NotServingRegionException,則主服務(wù)器將該區(qū)域移至OFFLINE狀態(tài)并將其重新分配給不同的RegionServer。
  8. 如果RegionServer處于聯(lián)機狀態(tài),但在主服務(wù)器用完重試之后無法訪問,則主服務(wù)器會將該區(qū)域移至FAILED_CLOSE狀態(tài),并且不會采取進一步的操作,直到操作員從HBase shell進行干預或服務(wù)器已死亡。
  9. 如果RegionServer獲得關(guān)閉區(qū)域請求,它會關(guān)閉該區(qū)域并通知主機。主機將區(qū)域移至CLOSED狀態(tài)并將其重新分配給不同的RegionServer。
  10. 在分配區(qū)域之前,如果主區(qū)域處于OFFLINE狀態(tài),主區(qū)域會自動將區(qū)域移至CLOSED狀態(tài)。
  11. 當一個RegionServer即將分割一個區(qū)域時,它通知主機。主機將要分割的區(qū)域從OPEN狀態(tài)移動到SPLITTING狀態(tài),并將要創(chuàng)建的兩個新區(qū)域添加到RegionServer。這兩個區(qū)域最初都處于SPLITTING_NEW狀態(tài)。
  12. 通知主機后,RegionServer開始拆分區(qū)域。一旦經(jīng)過了不返回的點,RegionServer會再次通知主服務(wù)器,以便主服務(wù)器可以更新該hbase:meta表。但是,在服務(wù)器通知拆分完成之前,主服務(wù)器不會更新區(qū)域狀態(tài)。如果拆分成功,拆分區(qū)域從SPLITTING狀態(tài)移動到SPLIT狀態(tài),并且將兩個新的區(qū)域從SPLITTING_NEW狀態(tài)移動到OPEN狀態(tài)。
  13. 如果拆分失敗,則拆分區(qū)域從SPLITTING狀態(tài)移動回OPEN狀態(tài),其中創(chuàng)建的兩個新的區(qū)域?qū)腟PLITTING_NEW狀態(tài)移動到OFFLINE狀態(tài)。
  14. 當一個RegionServer即將合并兩個區(qū)域時,它首先通知主機。主機將兩個區(qū)域合并為OPEN到MERGING狀態(tài),并將新的區(qū)域添加到RegionServer中,該區(qū)域?qū)⒑喜^(qū)域的內(nèi)容保存起來。新區(qū)域最初處于MERGING_NEW狀態(tài)。
  15. 通知主機后,RegionServer開始合并這兩個區(qū)域。一旦經(jīng)過不返回的點方,RegionServer再次通知主機,以便主機可以更新META。但是,主服務(wù)器不會更新區(qū)域狀態(tài),直到RegionServer通知合并已完成。如果合并成功,則兩個合并的區(qū)域是從MERGING狀態(tài)移動到MERGED狀態(tài),并且新的區(qū)域是從MERGING_NEW狀態(tài)移動到OPEN狀態(tài)。
  16. 如果合并失敗,兩個合并區(qū)域從MERGING狀態(tài)返回到OPEN狀態(tài),這是為了保存合并的區(qū)域的內(nèi)容的新的區(qū)域是從MERGING_NEW狀態(tài)移動到OFFLINE狀態(tài)。
  17. 對于處于FAILED_OPEN或FAILED_CLOSE狀態(tài)的區(qū)域,當主機通過HBase Shell重新分配主區(qū)域時,主區(qū)域會嘗試再次關(guān)閉它們。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號