Hbase的系统架构

版权声明:原创作品转载必须标明出处,谢谢配合! https://blog.csdn.net/qq_38704184/article/details/84993534

Hbase的物理存储 HRegion1

  1. table中所有的行都是按照row key的字典序排序;
  2. table在行的方向上分割为多个HRegion;
  3. HRegion按大小分割的,每个表开始只有一个HRegion,随着数据增多,HRegion不断增大,当增大到一个阈值时候,HRegion就会等分为两个新的HRegion,之后会有越来越多的Region;
  4. HRegion是Hbase中分布式存储负载均衡的最小单元,不同HRegion分不到不同的HRegionServer上。

Hbase的物理存储store1

  1. HRegion虽然是分布式存储的最小单元,但是并不是存储的最小单元;
  2. HRegion有一个或多个Store组成,每个Store保存一个column family;
  3. 所以,每个存储在HDFS上的一个单独文件中,空值不会被保存;
  4. 每个HRegion又有一个MemStore和0至多个StoreFile组成,StoreFile包含Hfile。
  5. MemStore存储在内存中,StoreFile存储在HDFS上。

Hbase基本组件

Client

包含访问Hbase接口,并维护cache来加快Hbase的访问,比如HRegion的位置信息。

HMaster

  1. 为HRegionServer分配HRegion:比如在HRegion split时分配新的HRegion;在HRegionServer退出时迁移其内的HRegion到其他HRegionServer上;
  2. 负责HRegionServer的负载均衡;
  3. 发现失效的HRegionServer并重新分配其上的HRegion;
  4. 管理用户对table的增删改查操作;
  5. 管理namespace和table的元数据;
  6. 权限控制。

HRegionServer

  1. HRegionServer维护HRegion,处理对这些HRegion的IO 请求;
  2. 存放和管理本地HRegion;
  3. 读写HDFS,管理table中的数据;
  4. HRegionServer负责切分在运行过程中变得过大的HRegion;
  5. client直接通过HRegionServer读写数据

zookeeper

  1. 通过选举,保证任何时候,集群中只有一个master,master与regionServer启动时回想zookeeper注册
  2. 存储所有的Region的寻址入口;
  3. 实时监控RegionServer的上线和下线信息。并实时通知给master;
  4. 存储HBase的schema和table的元数据。

协同工作

  1. HBase client通过RPC方式和HMaster、HRegionServer通信。
  2. 一个HRegionServer可以存放1000个HRegion;
  3. 底层table数据存储于HDFS中,而HRegion所处理的数据尽量和数据所在的DataNode在一起,实现数据的本地化;
  4. 数据本地化并不是总能是按,比如在HRegion移动(入因split时,)需要等下一次compact才能继续回到本地化。

HLog

  1. 每个HRegionServer中都有一个Hlog对象,HLog是一个是按write ahead log的类;
  2. 在每次用户操作写入MEMstore的同时,也会写一份数据到HLog文件中;
  3. HLog文件定期会滚动出新的,并删除旧的文件(已经持久化到storeFile中的数据)

数据恢复恢复过程

  1. 当HRegionServer意外终止后,HMAster会通过zookeeper感知到;
  2. HMaster首先会处理遗留的HLog文件,将其中不同region的Log数据进行拆分,分别放到相应region的目录下
  3. 然后在将失效的region重新分配,领取导致和谐region的HRegionServer在loadregion的过程中,会发现有历史Hlog需要处理
  4. 因此会replay hlog中的数据到MEMStore中,然后flush到storefiles,完成数据恢复。

无master过程中,数据读取仍照常进行;

无master过程中,region切分、负载均衡等无法进行;

hbase写操作流程:

  1. client通过zookeeper的调度,向HRegionServer发送写数据的请求,在HRegion中写数据;
  2. 数据写到HRegion的MEMStore,直到MEMStore达到预设的阈值;
  3. 将MEMStore中数据会被flush成一个storeFile;
  4. 随着storeFile的数量的增多,当达到一定的阈值会触发compact合并操作,将多个storeFile合并成一个storeFile,同时把版本更新和数据删除;
  5. storeFile通过不断的compact合并,逐渐形成越来越多越大的storeFile;
  6. 单个storeFile大小超过一定的阈值,会触发split操作,把当前HRegion split成两个新的HRegion,老的HRegion就会下线,新生成的2个HRegion会被HMaster分配到其他的HRegionServer上,是的1个HRegion的压力分到2个HRegion上。

Hbase读操作:

  1. client访问zookeeper,查看ROOT表,获取Meta表的信息;
  2. 从meta表中查找,获取存放,目标数据的HRegion信息,从而找到HRegionServer的信息;
  3. 通过HRegionServer找到相应的数据信息
  4. HRegionServer的内存分为两部分MEMStore、blockcache;MEMStore主要用于写操作,blockcache只要用于读操作,请求先到memstore中数去数据,如果没有再到blockcache中读取,在没有就会到storeFile中读取,并把读取的数据信息放到blockcache中。

猜你喜欢

转载自blog.csdn.net/qq_38704184/article/details/84993534