hadoop实战笔记_170816
在启动的时候,每台HRegion服务器都会检查自己的Hlog文件(Hlog是磁盘上的记录文件,它记录着所有的更新操作),看看最近一次执行flushcache之后有没有新的更新写入操作。如果没有更新,就表示所有的数据都已经更新到文件中了;如果有更新,服务器就会先把这些更新写入高速缓存,然后调用fulshcache写入到文件中。最后服务器会删除旧的Hlog文件,并开始让用户访问数据。
因此,为了节省时间可以少调用flushcache,但是这样会增加内存的占用量,而且在服务器重启的时候会延长很多时间。如果定期调用flushcache,缓存大小将会控制在一个较低的水平上,而且Hlog文件也会很快重构,但是调用flushcache的时候会造成系统负载瞬间增加。
Hlog会被定期回滚,回滚的时候是按照时间来备份文件的,每次回滚的时候,系统会删除那些已经被写到文件中的更新,回滚Hlog只会占用很少的时间,建议经常回滚以减少文件尺寸。
每一次调用flushcache会生成一个新的HstoreFile文件,从一个Hstore里面获取任何一个值都需要访问所有的HstoreFile文件,这会十分耗时,所以我们要定期把这些分散的文件合并到一个大文件里面,Hstore.compact()可以完成合并工作。不过这样的工作十分占用资源,所以只有在HstoreFile文件的数量超过一个设定值的时候才会触发。
flushcache会建立一个新的HstoreFile文件,并把缓存中所有需要更新的数据写到文件里,在flushcache之后,log的重建次数会清零。
compact会把所有的HstoreFile文件合并成一个大文件。
和Bigtable不同的是,HBase的每个更新如果被正确提交,且commit没有返回错误,拿它就被写到记录文件里面了,这不会造成数据丢失。
两个HRegion可以通过调用HRegion.closeAndMerge()合并成一个新的HRegion,在当前版本下进行此操作需要两台HRegion都停机。
当一个HRegion变得太过巨大,超过设定的阈值时,HRegion服务器会调用HRegion.closeAndSplit()将此HRegion拆分为两个,并且报告给主服务器让它决定由哪台HRegion服务器来存放新的HRegion。这个拆分过程十分迅速,因为两台新的HRegion最初只是保留原来HRegionFile文件的引用,这个时候旧的HRegion会处于停止服务的状态,当新的HRegion拆分完成并且把引用删除了以后,旧的HRegion才会删除。
HBase Master服务器