HBase-存储-写路径
写路径
当用户向HRegionServer发起put请求时,其会将请求交给对应的HRegion实例来处理。第一步是要决定数据是否需要写到由HLog类实现的预写日志中。WAL是标准的Hadoop SequenceFile,并且存储了HLogKey实例。这些键包括序列号和实际数据,所以在服务器崩溃时可以回滚还没有持久化的数据。
一旦数据被写入到WAL中,数据就会被放到MemStore中。同时还会检查MemStore是否已经满了,如果满了,就会被请求刷写到磁盘中去。刷写请求由另外一个HRegionServer的线程处理,它会把数据写成HDFS中的一个新HFile。同时也会保存最后写入的序号,系统就知道哪些数据现在被持久化了。
关闭前预刷写
MemStore被刷写到磁盘的第二个理由是:预刷写(prefushing)。当region服务器被要求关闭时,会首先检查memstore,任何大于配置值hbase.hregion.preclose.flush.size(默认值是5MB)的memstore会刷写到磁盘,然后在最后一轮阻塞正常访问的刷写后关闭region。
另一方面,关闭region服务器会强制所有的memstore被刷写到磁盘,而不会关心memstore是否达到了配置的最大值,可以使用配置项hbase.hregion.memstore.flush.size(默认值是64MB)或者通过创建表来进行设置。一旦所有memstore都被刷写到了磁盘,region会被关闭,且在转移到其他region服务器时不会重做WAL。
使用额外的一轮预刷写会提高region的可用性:在预刷写时,服务器与region仍旧可用,这类似于通过API或shell命令调用刷写(flush)。当剩下的比较小的memstore完成了第二轮刷写时,此时会停止所有请求。这一轮刷写会保存预刷写过程中的所有修改,以保证服务器可以干净的退出。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示