全部的数据库数据通常是保存在Hadoop分布式系统上面的,用户经过一系列HRegion服务器获取这些数据。一台机器上通常只运行一个HRegion服务器,并且每一分区段的HRegion也只会被一个HRegion服务器维护。html
HRegion服务器包含两大部分:HLog部分和HRegion部分。数据库
HRegion服务器在它这里面,又至关因而个小组长。服务器
其中HLog用来存储数据日志,采用的是先写日志的方式。HRegion部分由不少的HRegion组成,存储的是实际的数据。每个HRegion又由不少的Store组成,每个Store存储的其实是一个列簇(ColumnFamily)下的数据。此外,在每个HStore(又名Store)中有包含一块MemStore。MemStore驻留在内存中,数据到来时首先更新到MemStore中,当到达阔值以后再更新到对应的StoreFile(又名HFile)中。每个Store包含了多个StoreFile,StoreFile负责的是实际数据存储,为HBase中最小的存储单元。oop
HBase中不涉及数据的直接删除和更新操做,全部的数据均经过追加的方式进行更新。数据的删除和更新在HBase合并的时候进行。当Store中StoreFile的数量超过设定的阔值时将触发合并操做,该合并操做把多个StoreFile文件合并成一个StoreFile。post
当用户须要更新数据的时候,数据会被分配到对应的HRegion服务器上提交修改。数据首先被提交到HLog文件里面,在操做写入HLog以后,commit()调用才会将其返回给客户端。HLog文件用于故障恢复。例如某一台HRegionServer发生故障,那么它所维护的HRegion会被从新分配到新的机器上。这是HLog会按照HRegion进行划分。新的机器在加载HRegion的时候能够经过HLog对数据进行恢复。spa
当一个HRegion变得太过巨大,超过了设定的阔值时,HRegion服务器会调用HRegion.closeAndSplit(),将此HRegion拆分为两个,而且报告给主服务器让它决定由哪台HRegion服务器来存放新的HRegion。这个拆分过程十分迅速,由于两个新的HRegion最初只是保留原来HRegionFile文件的引用。这时旧的HRegion会处于中止服务的状态,当新的HRegion拆分完成而且把引用删除了之后,旧的HRegion才会删除。另外,HRegion能够经过调用HRegion.clodeAndMerge()合并成一个新的HRegion,当前版本下进行此操做须要两台HRegion服务器都停机。3d