
架構
|
355
插曲: HDFS append、hflus、hsync、sync……等等
append 是 HBase 保證持久性所需的特性,但先前Hadoop 的版本並不提
供。這項特性,開始於HADOOP-1700(
http://issues.apache.org/jira/browse/
HADOOP-1700
),經過一個長久的時間及一系列的修正檔才被支援。在 Hadoop
0.19.0 就已提交,且是為了要解決此問題。但情況並非如此:在 Hadoop 0.19.0 的
append 是很難相配的,以至於
hadoop fsck
會因為 HBase 中打開的那些日誌檔
案,而向 HDFS 回報資料損壞錯誤。
所以在該問題又在HADOOP-4379,即HDFS-200(
http://issues.apache.org/jira/
browse/HDFS-200
),被重新提出。之後實作了一個
syncFs()
方法讓同步改變檔
案的過程變得更可靠。有段時間,我們有一個客製化的程式碼─見 HBASE-1470
(
http://issues.apache.org/jira/browse/HBASE-1470
)—來偵測 Hadoo 版本是否包含
了該 API。
接著 HDFS-265(
http://issues.apache.org/jira/browse/HDFS-265
),又重新回顧一般
append 的概念。同時也加入一個
Syncable
介面,公開了
hsync()
和
hflush()
。
需要注意的是,
SequenceFile.Writer.sync() ...