最近因为业务需求的原因,需要开始研究hbase中的secondary index。
业务模型有点类似于rmdb中的select from table where xx=xx,这里的xx无法做成rowkey,因此需要secondary index,否则只能全表扫描。尽管hbase的全表扫描是优势,但是在线应用也接受不了相应的延迟。
在早期的hbase中(0.20.x)曾经出现过secondary index,但后来因为无法解决的blocker级别issue而在0.89以上的版本中取消了。
目前0.90.x版本的hbase中有IndexBuilder类,用于离线地创建secondary index,用法是hadoop org.apache.hadoop.hbase.mapreduce.IndexBuilder TABLE_NAME COLUMN_FAMILY ATTR [ATTR ...],如果应用的类型是一次写入或者每天定时写入,那这是个相当不错的选择。
但是如果想在线地写入index,事情就变得相当有趣了。目前的模型通常如下:
- 创建主表的wal edits对象
- 创建index表的wal edits对象,该对象特殊标注下,以便在恢复log时不会处理该对象
- sync这两个对象到hlog中
- 写主表的memstore,写完后执行commit
- 收到commit时,将index的写请求放入后台共享作业队列中,离线处理
- 返回给client
可见hbase由于无法解决多行一致性问题,因此让index的写入滞后于数据的写入,然后通过日志来保障最终一致性,这样产生了以下问题:
- 如何保证两个对象能够sync到hlog中?
- 如何保证failover后,能够知道哪些index队列中的请求还未执行的?
- 当发生failover后一段时间后,master的淘汰hlog机制启动后,如何能够知道哪些index hlog 是没有处理的?由于淘汰机制是检查hlog与storefile中的timestamp来进行的,很可能发生删除还没有处理index hlog的问题
- 如何自动地创建index表?目前只支持提前手工建好
- 读的api如何实现?如果索引不到数据,就直接返回null?还是需要到请求队列中去merge一次?
- index如何加载到内存中
这些问题非常有趣,留待后文慢慢细说。如果大家有思路,或者有其它问题,欢迎一起讨论。
分享到:
相关推荐
标题“HBase_Secondary_Index”提示了本文的重点内容是围绕HBase的二级索引进行阐述。HBase是Apache软件基金会的Hadoop项目的一部分,一个开源的非关系型分布式数据库(NoSQL),它是Google Bigtable的开源实现。它...
public class IndexBuilder3 extends Configured{ public static class MapperIndex extends TableMapper,Put>{ private String tableName; private String column...for (byte[] k:keys){ // 该列对应的索引表名字
5. **索引与查询优化**:虽然HBase不是关系型数据库,但仍然提供了索引功能,例如,可以使用Secondary Index进行复杂查询。同时,HBase查询可以通过RowKey优化,因为RowKey的排序使得数据定位更快速。 6. **灵活的...
3. 索引与查询:虽然HBase不是全索引数据库,但可以通过Secondary Index和Filter实现复杂查询。 4. 复制机制:支持多种复制策略,如同步复制、异步复制等,保证数据冗余和容错。 四、HBase 2.5.6版本的改进 在...
HBase还支持Secondary Index,虽然不如传统关系型数据库那样完善,但可以通过 Coprocessors 或者索引服务如 phoenix 来实现。 在实际应用中,HBase常用于日志分析、物联网(IoT)数据存储、实时监控系统、社交网络...
6.9. Secondary Indexes and Alternate Query Paths 6.10. Schema Design Smackdown 6.11. Operational and Performance Configuration Options 6.12. 限制 7. HBase 和 MapReduce 7.1. Map-Task Spitting 7.2. ...
| hadoop-node8 | *.*.83.8 | Hadoop Secondary Namenode/HBase HMaster/ZooKeeper | 三、硬件环境 在本文中,我们使用8台曙光服务器,每台服务器配置如下: * CPU:8核 * 硬盘:两个500GB硬盘 * 操作系统:SUSE ...
5. 支持复杂查询:通过Secondary Index和Coprocessor机制,HBase可以实现多种复杂查询,如范围查询、多列查询等。 二、HBase的核心组件与架构 1. Master节点:负责整个HBase集群的管理,包括Region的分配、新表的...
8. **Secondary Index**:虽然HBase不直接支持二级索引,但可以通过实现自定义的Filter或者使用 Coprocessors 来实现类似的功能。 9. **Coprocessors**:这是一种可以在Region Server上运行的用户定义代码,用于...
7. **实时查询**:讲述HBase如何与HBase Coprocessors、Secondary Indexes等技术配合,实现高效的实时查询。 8. **备份与恢复**:讲解HBase的数据备份策略,包括快照、导出导入等方法,以及灾难恢复方案。 9. **...
7. **高级特性**:书中涵盖了HBase的高级特性,如Coprocessor(协处理器)、Bulk Load(批量加载)、Secondary Index(二级索引)和Replication(复制),帮助读者更深入地利用HBase。 8. **企业案例分析**:书中的...
this.secondaryIndex = secondaryIndex; this.transactionAwareHTable = new TransactionAwareHTable(hTable); this.secondaryIndexTable = new TransactionAwareHTable(secondaryIndexHTable); ...
8. **索引和查询优化**:虽然HBase主要依赖Row Key进行查询,但可以通过Secondary Index或布隆过滤器实现更复杂的查询优化。 9. **备份与恢复**:HBase提供了快照功能,可以定期创建数据快照,用于灾难恢复或数据...
此外,HBase还提供了丰富的查询语言,包括Get、Put、Scan等操作,以及通过Secondary Index实现复杂查询的能力。HBase的实时读写能力使其在大数据领域中的实时分析应用中扮演了重要角色。 总之,HBase作为大数据存储...
hbaseSecondaryIndex是一个hbase二级索引的实现,基于solr+hbase coprocessor框架为hbase提供索引表支持。 此工程可打包为一个hbase的插件,通用方便。 这篇文档的目的是为了向您介绍hbaseSecondaryIndex的基本使用...
此外,可以使用Secondary Index(二级索引)来改善特定查询性能,但需权衡额外的存储和复杂性。 7. **数据复制与容错**: HBase采用多副本策略保证数据可靠性,通过ZooKeeper协调,实现Region Server的故障切换和...
- 可通过创建Secondary Index或者使用自定义过滤器来优化查询。 11. **监控与运维**: - HBase提供了丰富的监控指标,包括JMX、Web UI等,用于系统状态监控和问题排查。 - 运维工具如HBaseAdmin和HBaseShell用于...
4. 索引与查询:虽然HBase不支持复杂的SQL查询,但可以通过创建Secondary Index实现多维度查询。此外,HBase与MapReduce结合,可以进行批量处理和分析任务。 5. 高可用性:HBase提供了主备RegionServer机制,当主...
Hadoop的部署通常涉及多台节点,包括NameNode、DataNode、Secondary NameNode等角色,而HBase则有Master、RegionServer等组件。 2. **准备工作** - **主机**:部署Hadoop和HBase需要多台服务器或虚拟机,每台机器...