HBase ProcedureV2 分析
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 分析