hbaseflush處理流程flush的處理是個生產者消費者模式,通過memstoreflusher.requestflush或者requestdelayedflush來收集請求,通過多個flushhandler(個數由引數hbase.hstore.flusher.count配置預設值2)來進行flush處理。使用的訊息佇列是用的delayqueue
flush前會對region的狀態做一些判斷,如果為關閉或者正在flushing的不能做flush處理。
整個flush的過程可以分為如下3個階段:
prepare階段
方法:internalprepareflushcache,這裡會將region下所有的memstore都生成對應的snapshot,為防止其他的執行緒同時更新memstore,這裡會加上乙個排它鎖。prepare的操作只是將cellset賦值給snapshot,然後在new乙個cellskiplistset,所以這個鎖的時間會很短。
flush階段
將prepare後生成的所有snapshot持久化到hdfs上為乙個hfile,存放在region目錄下的.tmp目錄中。
commit階段
將flush階段生成的臨時檔案移動到對應的columnfamily目錄下,然後將這些storefile建立storefile物件,新增到storefilemanager物件中,清空snapshot,注意這裡會對memstorelab snapshotallocator 做close處理,如果開啟了chuckpool,會把這些chuck新增到chuckpool中。memstoresize減去flush的大小,更新maxflushedseqid。
在flush完成成後如果需要split處理會做split處理,如果需要compact會做compact處理。
split和compact的觸發條件和處理流程後續再說。
IRP 處理流程
本文通過開啟乙個檔案物件為例子,描述了乙個帶有兩個i o stack location的irp的詳細處理過程。當然乙個irp可以有多個i o stack location,具體個數取決於將要處理該請求的驅動的層數。下圖詳細描述了驅動程式是如何通過使用i o支援例程 io routines 來處理ir...
異常處理流程
異常類結構 來觀察兩個異常類的繼承關係 可以發現所有的異常型別最高的繼承類是throwable,並且通過doc文件可以發現在throwable下有兩個子類 error 指的是jvm錯誤,這個時候的程式並沒有執行,無法處理 exception 指的是程式執行中產生的異常,使用者可以使用異常處理格式處理...
TBSS處理流程
首先建立乙個資料夾fa 01,將所有要處理的fa影象複製到這個資料夾下。依次做如下處理 1.該指令碼將所有處理過的fa影象移動到乙個名為fa的新子目錄,並且還將建立另乙個名為origdata的子目錄,並將所有原始影象放在那裡供以後使用。tbss 1 preproc nii.gz2.執行非線性配準,將...