写数据流程
-
客户端请求写数据首先会向zookeeper中的leader发送写数据的请求
-
leader会检测hbase中的master是否在线,如果在线则可以接受写数据请求,如果master不在线则请求失败
-
在请求成功后leader会向客户端发送meta表的位置,告诉客户端meta表在哪台regsion server上面
-
客户端根据meta表的元数据信息向相应的机器请求获取meta表信息,请求成功后会从该regsion server中的meta表下载到本地缓存,然后解析meta表,识别出所要put的数据在哪台regsion server上,在regsion server中的哪个regsion中
-
解析出meta表中的数据后,会向对应的regsion server机器发送写数据请求,请求成功后会在向该机器中写入数据
-
在regsion server接收客户端写入的数据时,同时也会向日志和对应的regison内存中写入相关的数据,向日志文件和内存中写数据时存在事物关系,只有成功写入才能向hdfs中存储数据.
-
最后将regsion server向hdfs发送请求,将数据写入到hdfs中,并存储
如下图:
读数据流程
-
客户端向zookeeper及发送读取数据请求,不需要看master的状态
-
请求成功后leader会将meta元数据发送给客户端
-
客户端根据meta元数据找到对应的regsion server,并发起请求
-
请求成功后客户端会从RS中下载meta表缓存到本地,在根据表中信息请求对应的RS
-
请求成功后,客户端首先会从RS的内存中访问数据,如果内存中没有,再向RS中的CacheBlock(缓存块)中访问数据,如果都没有,最后从hdfs中访问数据
如下图: