hbase里的hlog存在哪?regionserver里还是zookeeper里?

如题所述

看一下下图就知道了吧。


对于用户的一个表比如Blog,可能包括数据多达亿级

该表的数据可以分布在多个HRegion

而每个HRegion保存表的某一段数据

UserTable (1)------HRegion(*)

对于多个的HRegion则有HRegion Server来维护

每个HRegion唯一对应一个HRegion Server

通过HRegion Server才能够访问对应的HRegion

而一个HRegion从物理上分为如下几个部分

HMemCache(内存缓存),HLog(日志),HStore(持久化存储)

三:HBase的数据操作流程

a:读数据

优先从HMemcache中读取,如果没有读到从HStore中读取

当然这里需要关注:读、写同步的问题,HBase如何解决,还有第一个客户端读取数据从HStore读取后,是否会加载到HMemCache中;后续的客户端,读取时直接从HMemCache中读取,以及MemCache中数据的过期化算法

 

b:写数据

HBase å†™å…¥æ•°æ®ä¼šå†™åˆ°HMemcache å’ŒHlog ä¸­ï¼ŒHMemcache å»ºç«‹ç¼“存,Hlog åŒæ­¥Hmemcache和Hstore çš„事务日志,发起Flush Cache æ—¶ï¼Œæ•°æ®æŒä¹…化到Hstore ä¸­ï¼Œå¹¶æ¸…空HMemecache。

此处需要关注:

HBase写数据,首先写入Memcache,并计入Log中,最后写入HStore中,如果在写入HStore是发生系统异常,就可以从Log中恢复数据,重新写入HStore中。【该机制跟BigTable中的SSTabl,MemTable和CommitLog的作用一样】

 

c:客户端操作数据流程

客户端访问这些数据的时候通过Hmaster ï¼Œæ¯ä¸ªHregion æœåŠ¡å™¨éƒ½ä¼šå’ŒHmaster æœåŠ¡å™¨ä¿æŒä¸€ä¸ªé•¿è¿žæŽ¥ï¼ŒHmaster æ˜¯HBase åˆ†å¸ƒå¼ç³»ç»Ÿä¸­çš„管理者,他的主要任务就是要告诉每个Hregion æœåŠ¡å™¨å®ƒè¦ç»´æŠ¤å“ªäº›Hregion。用户的这些都数据可以保存在Hadoop åˆ†å¸ƒå¼æ–‡ä»¶ç³»ç»Ÿä¸Š

如果一个HMaster挂了,Secondary NameNode会自动替代HMaster

但是对应的失效转发的效率还需要进一步尝试,可能依赖ZooKeeper的相关配置项

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-03-21

存在regionserver当中!!!

Region Server存储了三部分信息:

    HFile,数据文件,存储在HDFS上

    Write-Ahead Log,重做日志,类似于Oracle的Redo Log和MySQL的Binlog,也存在HDFS上。

    Memstore,内存中的数据缓存,类似Oracle的Buffer Cache。

HBase的HRegion文件和HLog文件都存储在HDFS中的(一般有多份),RegionServer挂了,并不是数据文件就丢失了。RegionServer挂了后,HRegion和HLog都还在,Master重新分配Region,并读取Hlog进行恢复。

Region Server fail时重新分配Region,其中HFile和WAL都存储在HDFS上,当Region Server fail的时候,数据是不会丢失的,丢失的只是Memstore中尚没有写入HFile的部分。

相似回答