標籤:style blog http color 使用 io 檔案 資料
翻譯自cloudera,原文直通車:Apache HBase Write Path
Apache HBase也就是Hadoop Database是基於HDFS之上的.HBase可以隨機擷取和更新儲存在HDFS上的記錄。但是HDFS
上的檔案只能追加而且一旦建立便無法修改。說到這裡你或許會問:那HBase是怎麼做到在HDFS上低延遲的讀和寫呢?在這篇
文章裡,我們就會通過描述HBase的寫的流程來解釋資料在HBase中是如何更新的。
寫流程描述就是HBase如何完成put或者delete操作。流程開始於client端,然後再到region server,最終結束於當資料寫入
到HFile為止。在這過程中還包括了HBase如何保證region server down掉的時候的資料的完整性(資料不丟失)。所以,理解這個
流程對於深刻理解HBase 如何防止資料丟失的機制是很有協助的。
HBase中的表的管理涉及到如下三類server:
1.一個處理active狀態的master server2.一個或者多個backup master server3.很多region server
Region server管理HBase中的table。因為HBase中的table會變得很大,所以他們會分裂成很多分區,這些分區我們稱為region。
每一次Region server會負責處理一個或者多個region的請求。注意:由於region server是唯一用來處理hbase的table資料的,因此
hbase master的crash並不會導致資料丟失
HBase中的資料的組織方式類似於sorted map的組織方式,把排序後的row key分成不同的region。HBase的用戶端通過調用put
或者delete來更新hbase中的表。當用戶端發出一個請求,預設情況下該請求會立即被路由到region server。我們也可以通過編程的方式
指定讓client先緩衝這些命令,然後以批量的方式提交這個命令。可以通過制定autoflush為off狀態來實現批量提交。如果autoflush被
設定為了off,所有的更改都會被client端緩衝直到使用者調用flush-commits被調用,或者當buffer滿了的時候就會把全部命令批量提交。buffer
的設定是使用“hbase.client.write.buffer”參數來指定的。
由於HBase的row-key是預排序的,所以可以很輕易的確定哪個region server管理哪些範圍內的row-key的記錄。一個更新要求是針對某一
特定的列。每個row-key都是歸屬於某個regoin的,regoin是在regoin server的管理中的。
未完待續。。。