翻译自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 server 2.一个或者多个backup master server 3.很多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的管理中的。
未完待续。。。
[ 译]Apache HBase Write Path,布布扣,bubuko.com