写数据流程

  1. 客户端请求写数据首先会向zookeeper中的leader发送写数据的请求

  2. leader会检测hbase中的master是否在线,如果在线则可以接受写数据请求,如果master不在线则请求失败

  3. 在请求成功后leader会向客户端发送meta表的位置,告诉客户端meta表在哪台regsion server上面

  4. 客户端根据meta表的元数据信息向相应的机器请求获取meta表信息,请求成功后会从该regsion server中的meta表下载到本地缓存,然后解析meta表,识别出所要put的数据在哪台regsion server上,在regsion server中的哪个regsion中

  5. 解析出meta表中的数据后,会向对应的regsion server机器发送写数据请求,请求成功后会在向该机器中写入数据

  6. 在regsion server接收客户端写入的数据时,同时也会向日志和对应的regison内存中写入相关的数据,向日志文件和内存中写数据时存在事物关系,只有成功写入才能向hdfs中存储数据.

  7. 最后将regsion server向hdfs发送请求,将数据写入到hdfs中,并存储

如下图:
HBASE读写数据流程

读数据流程

  1. 客户端向zookeeper及发送读取数据请求,不需要看master的状态

  2. 请求成功后leader会将meta元数据发送给客户端

  3. 客户端根据meta元数据找到对应的regsion server,并发起请求

  4. 请求成功后客户端会从RS中下载meta表缓存到本地,在根据表中信息请求对应的RS

  5. 请求成功后,客户端首先会从RS的内存中访问数据,如果内存中没有,再向RS中的CacheBlock(缓存块)中访问数据,如果都没有,最后从hdfs中访问数据
    如下图:
    HBASE读写数据流程

相关文章: