WAL
WAL: Write-Ahead Logging[1]
数据库中一种高效的日志算法,对于非内存数据库而言,磁盘I/O操作是数据库效率的一大瓶颈。在相同的数据量下,采用WAL日志的数据库系统在事务提交时,磁盘写操作只有传统的回滚日志的一半左右,大大提高了数据库磁盘I/O操作的效率,从而提高了数据库的性能。
HBase 的工作流程
Client -> ZooKeeper -> HMaster 检索-ROOT- RegionServer。-> 检索 RegionServer 查看.META.表 找到对应行健。->RegionServer 知道了 在那个 Region 里,缓存此信息,同时连接 该HRegionServer。 现在客户端就有了去哪里获取行的完整信息而不需要再去查询.META.服务器。
1、 流程
a) Client发起了一个HTable.put(Put)请求给HRegionServer
b) HRegionServer会将请求匹配到某个具体的HRegion上面
c) 决定是否写WAL log。WAL log文件是一个标准的Hadoop SequenceFile,文件中存储了HLogKey,这些Keys包含了和实际数据对应的序列号,主要用于崩溃恢复。
d) Put数据保存到MemStore中,同时检查MemStore状态,如果满了,则触发Flush to Disk请求。
e) HRegionServer处理Flush to Disk的请求,将数据写成HFile文件并存到HDFS上,并且存储最后写入的数据序列号,这样就可以知道哪些数据已经存入了永久存储的HDFS中。
HBase存储数据流程
Client写入 写入到 LSM 内存中,LSM内存写到一定阈值后 -> 存入MemStore,一直到MemStore满 -> Flush成一个StoreFile,直至增长到一定阈值 -> 出发Compact合并操作 -> 多个StoreFile合并成一个StoreFile,同时进行版本合并和数据删除 -> 当StoreFiles Compact后,逐步形成越来越大的StoreFile -> 单个StoreFile大小超过一定阈值后,触发Split操作,把当前Region Split 成2个 Region,Region会下线,新Split出的2个子Region会被HMaster分配到相应的HRegionServer 上,使得原先1个Region的压力得以分流到2个Region上由此过程可知,HBase只是增加数据,有所得更新和删除操作,都是在Compact阶段做的
HBase File In HDFS。
HBase 文件可以分成两类:
一、直接位于HBase根目录下。(HLog)
二、位于表目录下文件
1)根目录
2)表
HBase 中的每个表都有他自己的目录,位于HBase 根目录之下(最最开始讲的HBase表命名要规范的作用,因为他又是文件名) (更正0.98以后貌似改了。不是上面的/hbase/表,而是 /hbase/date/default/表,待验证)


3 Region
在每个表目录内,最对表的Schema 中的每个列族会有一个单独的目录。目录名称还包含 Region 名称的 MD5 哈希部分。 对于存储在磁盘上的目录中的 Region 名称。
一旦一个Reion 因为容量大小而需要 split , 会创建一个阈值对应的 splits 目录,用来筹划产生两个子 Region。通常只需要几秒或更短的时间,该过程成功之后他们会被移入表目录下用来形成两个新的 Region , 每个代表原始 Region 的一半.换句话说,如果发现一个Region 目录下没有 .tmp 目录,那么说明目前他还没有执行合并。如果也没有 recovered.edits 目录,那么说明目前没有针对他的 WAL 回放。
// 【表名】,【起始rowkey,如果从0开始 就不写 ,,】【
例如:p_t_rss ,[rk-1000],1440470934157 .41ba12b50dfcf29053b8de5725dc518.




Region 切分。
 
 
                     
            
        













 
                    

 
                 
                    