Each RegionServer adds updates (Puts, Deletes) to its write-ahead log (WAL) first, and then to the Section 12.3.4.1, “MemStore” for the affected Section 12.3.4, “Store”. This ensures that HBase has durable writes. Without WAL, there is the possibility of data loss in the case of a RegionServer failure before each MemStore is flushed and new StoreFiles are written. HLog is the HBase WAL implementation, and there is one HLog instance per RegionServer.
The WAL is in HDFS in/hbase/.logs/
with subdirectories per region.
For more general information about the concept of write ahead logs, see the Wikipedia Write-Ahead Log article.
When a RegionServer crashes, it will lose its ephemeral lease in ZooKeeper...TODO
When set to true
, the default, any error
encountered splitting will be logged, the problematic WAL will be
moved into the .corrupt
directory under the hbase
rootdir
, and processing will continue. If set to
false
, the exception will be propagated and the
split logged as failed.[19]
If we get an EOF while splitting logs, we proceed with the split
even when hbase.hlog.split.skip.errors
==
false
. An EOF while reading the last log in the
set of files to split is near-guaranteed since the RegionServer likely
crashed mid-write of a record. But we'll continue even if we got an
EOF reading other than the last file in the set.[20]
[19] See HBASE-2958 When hbase.hlog.split.skip.errors is set to false, we fail the split but thats it. We need to do more than just fail split if this flag is set.
[20] For background, see HBASE-2643 Figure how to deal with eof splitting logs