数据岗位面试题更新 2026-08-05

请说明HBase中Scan操作的含义,并对比Scan与Get两种读取方式在应用场景和实现机制上的差异。

数据技术原理方案权衡Apache HBase

考察说明

考查对HBase两种读取模式的理解,以及根据业务选择合适读取方式的能力。

回答思路

  1. 【回答框架 1】Scan在HBase中代表多行扫描操作,通过指定起始行键和结束行键(或使用过滤器)遍历一个行区间内的所有数据,返回满足条件的多条记录。实现上基于Region内部的MemStore和HFile,通过维护扫描游标逐行读取,支持倒序扫描和批量缓存(caching)以提升性能。
  2. 【回答框架 2】Get是针对单个行键的精确查询,直接根据行键定位到对应Region,再在MemStore和HFile中查找该行的所有列数据。Get内部也可附带版本数、时间范围等参数,但核心是点查,效率高、延迟低。
  3. 【回答框架 3】主要区别在于粒度:Get适合已知行键的随机读取,一次读取一行;Scan适合范围查询或全表扫描,一次读取多行。实现上Get通过行键直接路由,Scan需要根据起始行键定位起始Region并跨Region顺序遍历。
  4. 【回答框架 4】性能与使用上,Scan性能受扫描行数和过滤器影响,数据量大时需谨慎设置startRow/stopRow和过滤器(如FilterList)以减小网络与IO开销;Get则可通过批量Get(multi-get)合并多次点查。
  5. 【回答框架 5】选择规则:若能确定行键或行键集合,优先用Get;若需按行键范围或依赖列值过滤查询,则用Scan并结合合理分页或缓存策略。
  6. 【关键点 1】Get是单行点查,Scan是多行范围扫描。
  7. 【关键点 2】实现上Get直接定位行键的Region,Scan需顺序遍历起始行键到结束行键的行区间。
  8. 【关键点 3】场景上点查适合已知行键的随机读取,范围扫描适合批量或按条件查询。
  9. 【关键点 4】Scan可通过startRow/stopRow、过滤器、缓存行数等控制开销。
  10. 【易错点 1】不要混淆Scan与Get的返回数量,Get只返回一行,Scan可返回多行。
  11. 【易错点 2】Scan全表扫描时若未设置startRow/stopRow和过滤器,可能带来大量IO和网络开销。
  12. 【易错点 3】批量Get与Scan的取舍需权衡点查数量与扫描范围,并非总是Scan更高效。