面试题答案
一键面试数据写入流程
- 客户端:
- 客户端首先与Zookeeper进行交互,获取HBase元数据信息,定位数据应该写入的RegionServer。
- 然后,客户端向对应的RegionServer发起写入请求,请求中包含要写入的数据及相关的列簇信息。
- RegionServer:
- WAL(Write - Ahead Log):数据首先被写入WAL,WAL是一种预写式日志,用于确保数据在发生故障时可以恢复。写入WAL后,会生成一个事务ID。
- MemStore:接着数据被写入MemStore,MemStore是内存中的数据存储结构,按照列簇进行组织。当MemStore达到一定的阈值(通常是128MB)时,会触发Flush操作。
- Flush操作:
- MemStore中的数据被写入HFile,HFile是HBase在HDFS上存储数据的格式。
- 此时,WAL中对应的数据可以被删除(因为数据已经持久化到HFile)。生成的HFile会存储在HDFS上,并且RegionServer会更新元数据,记录新的HFile的位置等信息。
数据读取流程
- 客户端:
- 同样先与Zookeeper交互,获取HBase元数据,定位包含所需数据的RegionServer。
- 客户端向对应的RegionServer发送读取请求,请求中包含要读取的数据的行键、列簇及列限定符等信息。
- RegionServer:
- MemStore:RegionServer首先在MemStore中查找数据,如果能找到,直接返回数据。
- BlockCache:如果MemStore中没有找到,会在BlockCache中查找。BlockCache是RegionServer用于缓存HFile数据块的组件,以提高读取性能。如果在BlockCache中找到,返回数据,并更新BlockCache的访问记录(如采用LRU算法管理缓存)。
- HFile:若BlockCache中也未找到,RegionServer会从HDFS上的HFile中读取数据。读取后,会将数据块缓存在BlockCache中,以便后续相同数据的读取。
- 返回数据:RegionServer将找到的数据返回给客户端。