离线数据系统之HBase架构
HBase架构概括
Hbase架构角色
- hmaster的职责
- 管理用户对Table的增、删、改、查操作;
- 记录region在哪台Hregion server上
- 在Region Split后,负责新Region的分配;
- 新机器加入时,管理HRegion Server的负载均衡,调整Region分布
- 在HRegion Server宕机后,负责失效HRegion Server 上的Regions迁移。
- hregionserver的职责
- HRegion Server主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBASE中最核心的模块。
- HRegion Server管理了很多table的分区,也就是region。
- client职责
- HBASE Client使用HBASE的RPC机制与HMaster和RegionServer进行通信
- 管理类操作:Client与HMaster进行RPC;
- 数据读写类操作:Client与HRegionServer进行RPC。
- Client: 包含访问HBase的接口并维护cache来加快对HBase的访问
- Zookeeper :保证任何时候,集群中只有一个活跃master 存贮所有Region的寻址入口。 实时监控Region server的上线和下线信息。并实时通知Master 存储HBase的schema和table元数据。(实际HBASE从节点也要向Zookeeper注册)
- Master: 为Region server分配region; 负责Region server的负载均衡; 发现失效的Region server并重新分配其上的region ;管理用户对table的增删改操作
- RegionServer: Region server维护region,处理对这些region的IO请求; Region server负责切分在运行过程中变得过大的region
- Region: HBase自动把表水平划分成多个区域(region),每个region会保存一个表里面某段连续的数据 ;每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region(裂变); 当table中的行不断增多,就会有越来越多的region。这样一张完整的表被保存在多个Regionserver 上。
- Memstore 与 storefile: 一个region由多个store组成,一个store对应一个CF(列族); store包括位于内存中的memstore和位于磁盘的storefile写操作先写入memstore,当memstore中的数据达到某个阈值,hregionserver会启动flashcache进程写入storefile,每次写入形成单独的一个storefile; 当storefile文件的数量增长到一定阈值后,系统会进行合并(minor、major compaction),在合并过程中会进行版本合并和删除工作(majar),形成更大的storefile; 当一个region所有storefile的大小和数量超过一定阈值后,会把当前的region分割为两个,并由hmaster分配到相应的regionserver服务器,实现负载均衡 客户端检索数据,先在memstore找,找不到再找storefile
总结:
- HRegion是HBase中分布式存储和负载均衡的最小单元。
- 最小单元就表示不同的HRegion可以分布在不同的 HRegion server上。
-
HRegion由一个或者多个Store组成,每个store保存一个columns family。 每个Strore又由一个memStore和0至多个StoreFile组成。如图:StoreFile以HFile格式保存在HDFS上。
Hbase读写流程
- 写流程
- client向hregionserver发送写请求。
- hregionserver将数据写到hlog(write ahead log)。为了数据的持久化和恢复。
- hregionserver将数据写到内存(memstore)
- 反馈client写成功。
- 数据flush过程
- 当memstore数据达到阈值(默认是64M),将数据刷到硬盘,将内存中的数据删除,同时删除Hlog中的历史数据。
- 并将数据存储到hdfs中。
- 在hlog中做标记点。
- 数据合并过程
- 当数据块达到4块,hmaster将数据块加载到本地,进行合并
- 当合并的数据超过256M,进行拆分,将拆分后的region分配给不同的hregionserver管理
- 当hregionser宕机后,将hregionserver上的hlog拆分,然后分配给不同的hregionserver加载,修改.META.
- 注意:hlog会同步到hdfs
- hbase的读流程
- 通过zookeeper和-ROOT- .META.表定位hregionserver。
- 数据从内存和硬盘合并后返回给client
- 数据块会缓存