面试题答案
一键面试Hbase写入流程
- 客户端写入:
- 客户端首先访问Zookeeper,获取 -ROOT- 表的位置信息。 -ROOT- 表记录了.META. 表的Region位置。
- 通过 -ROOT- 表,客户端进一步找到.META. 表中对应数据的Region位置。.META. 表记录了用户数据Region的位置。
- 客户端与对应的RegionServer建立连接,将数据写入到MemStore(内存存储)中。同时,数据也会被写入到HLog(预写式日志,Write - Ahead Log)中。HLog用于故障恢复,如果RegionServer发生故障,可以通过HLog恢复未持久化到磁盘的数据。
- MemStore操作:
- 当MemStore达到一定阈值(默认128MB)时,会触发Flush操作。此时,MemStore中的数据会被写入到StoreFile(磁盘存储文件,以HFile格式存储)中。
- MemStore被清空,等待接收新的数据写入。
- StoreFile管理:
- 随着数据不断写入,StoreFile数量会逐渐增多。当StoreFile数量达到一定阈值时,会触发Compaction操作。
- 小的StoreFile会被合并成大的StoreFile,在合并过程中,重复或者过期的数据会被清理掉。
- 当StoreFile大小达到一定阈值(默认10GB)时,会触发Split操作。一个Region会被拆分成两个新的Region,以平衡负载。
对系统性能产生显著影响的关键步骤及原因
- HLog写入:
- 原因:HLog是顺序写入磁盘,虽然顺序写性能相对较高,但如果HLog写入性能不佳,比如磁盘I/O瓶颈,会直接影响数据写入速度。因为数据必须先成功写入HLog才能写入MemStore,否则写入操作会失败。此外,如果HLog配置不合理,如日志文件过大或者刷写频率不当,可能导致故障恢复时间变长,影响系统整体可用性和性能。
- MemStore Flush:
- 原因:Flush操作会将内存中的数据写入磁盘,涉及磁盘I/O操作。如果Flush频率过高,会产生大量磁盘I/O负载,影响系统性能。而Flush频率过低,MemStore占用内存过大,可能导致内存不足,甚至影响其他组件的正常运行。并且Flush操作期间,对应的Region可能会被短暂阻塞,影响新的数据写入。
- Compaction:
- 原因:Compaction操作涉及大量数据的读取、合并和写入磁盘。如果Compaction策略不合理,比如触发频率过高,会占用大量磁盘I/O和CPU资源,影响正常的数据读写操作。而且Compaction过程中,如果数据量过大,可能导致合并时间过长,长时间占用系统资源。
- Split:
- 原因:Split操作会将一个Region拆分成两个新的Region,这涉及到数据的重新分布和元数据的更新。在拆分过程中,会产生额外的磁盘I/O和网络开销。如果Split操作过于频繁,会导致系统频繁进行数据迁移和元数据调整,影响系统的稳定性和性能。同时,拆分后的Region需要一段时间来达到负载均衡状态,在此期间可能会影响部分数据的读写性能。