HBase读取数据的流程:
1.客户端访问zk,获取hbase:meta表位置,查询hbase:meta表,根据rowkey定位目标数据所在的Region及regionserver
2.客户端直接向Regionserver发起请求,服务端按照blockcache(基于数据块的读缓存)、memstore(基于行的写缓存/内存表),最后访问storeflie
(hdfs上的持久化文件)顺序进行查找,找到后合并结果返回客户端。
HBase写入数据的流程:
1.客户端访问zk,获取hbase:meat表位置,查看meta表根据rowkey定位目标的region和regionserve,
2.开始写入数据,首先将数据追加写入Hlog,hlog写入成功后,立即写入memstore,hbase的写入是一个双写过程,当两者都写入成功后,返回客户端写入成功。
服务异步过程:
3.当memstore大小达到一定阈值(默认128M)后,会启动flush线程,将内存数据排序落盘到hdfs上,生成Hflie,当hflie数据量过多的时候,一般大于三个,开始进行合并操作,将多个文件合并成一个大的Hflie
4.当Region总的大小超阈值 (默认 10GB),会触发分裂动作,region一分为二,更新meta表,原来的region下线;
Master工作机制:
抢锁选举:在 ZooKeeper 创建临时节点争夺锁,成功者成为 Active Master,失败者转为 Backup。
发现节点:扫描ZK 目录,获取当前所有存活的 RegionServer 列表。
同步状态:与各 RegionServer 通信,确认其已加载的Region 分布情况。
计算差异:对比 hbase:meta 表中的全量 Region 与已分配 Region,找出未分配Region。
执行分配:将未分配的 Region 按负载策略指派给合适的 RegionServer,完成集群恢复。
HBase的memStore溢写合并:
当MemStore写入的值变多,触发溢写操作(flush),进行文件的溢写,成为一个StoreFile
当溢写的文件过多时,会触发文件的合并(Compact)操作,合并有两种方式(major,minor) major(大合并):合并该
Region 下所有文件。Major Compaction 会扫描所有文件,真正移除那些被标记为删除的数据行。
minor(小合并):将多个小的Hfile,合并成一个比较大的。优点:合并的效率会更快,对资源的占用以及磁盘的IO更小。
HBase的split分裂:
当region中的数据逐渐变大之后,达到某一个阈值,会进行裂变
一个region等分为两个region,并分配到不同的RegionServer
原本的Region会下线,新Split出来的两个Region会被HMaster分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到2个Region上。
组件工作职责:
Region:存储一段 RowKey 范围的数据,是数据切分和移动的最小单位。 RegionServer:管理多个
Region,处理所有读写请求,负责 Flush/Compaction。 Master: 管理集群状态,分配 Region,故障恢复,DDL操作。
HLog (WAL):存储内容,操作日志 (Put/Delete 指令),乱序 (按写入时间追加),主要用途:灾难恢复 (重放日志)
HFile (StoreFile),最终数据 (排序后的 KV 对),有序 (按 RowKey 排序)主要用:数据查询 (随机读/扫描)


6452

被折叠的 条评论
为什么被折叠?



