1. 程式人生 > >HBase ProcedureV2 分析

HBase ProcedureV2 分析

集群 新建 需要 修復 3.3 hand png 流程 exceptio

Procedure V2, 是hbase1.1版本引入的一套fault-tolerant的執行multi-steps-job的框架, 目前主要用在Master中, 比如創建表,刪除表等操作

新舊比較

下面比較0.94版本和1.25版本下的建表流程

0.94

0.94版本中,創建表是通過HBaseAdmin類,向Master發起一個異步的建表請求,然後不斷的掃描meta表,直到從meta表中掃描到的表的region數目和預期的數據相同,即認為建表成功, 時序圖如下:

技術分享

流程:

1. 從HBaseAdmin發起 createTable請求到master[異步請求]

2. Master做完基本檢查後,如果有MasterCoprocessor,就調用coprocessor的preCreateTable做前置檢查

3. 檢查通過後,Master生成CreateTableHandler, 提交給ExecuterService服務去執行

  3.1. hdfs的 hbaseroot/.tmp目錄上創建TableDescriptor

  3.2. hdfs的hbaseroot/.tmp目錄上創建region及相關文件

  3.3. 把tmp目錄中創建好的表文件拷貝到hbaseroot目錄下

3.4. 新增region信息到META表

3.5. 觸發所有region的assignment,隨機分配到集群alive的regionserver上

3. 6. zk上修改表的狀態為TableState.ENABLED

4. HBaseAdmin在第1步完成後, 會通過MetaScan不斷的去meta表查看所創建表的region數目是不是和預期的相等,如果是,建表成功,如果經過了一定的重試次數後(默認10*10=100次),依然失敗,則拋出TableNotEnabledException異常

存在的問題:

1. 如果一切順利還好,但是如果任意一步出現問題,則很難定位和修復,比如:

  1. 3.3成功後,master宕機, 3.4還沒有執行, 那麽定位後,可以通過hbase hbck -fixMeta 工具做修復

2. 如果3.4部分成功, 就沒有很好的工具做修復, 這時候就需要人工介入,去做回滾操作,然後再重新建表

1.2.5

procedure v2是在hbase1.1版本引入的特性,主要是為了解決之前的方案中存在的問題, 比如,任務意外中斷後,中間狀態需要人工接入, 難以追溯任務狀態等問題:

...未完待續

HBase ProcedureV2 分析