对于历史数据的查询,在数据规模不大的情况下,可以用传统的关系型数据库,如oracle,mysql等,可以利用他们提供的索引功能,实现高效的查询。
但是当数据上升到一定规模后,用传统的关系型数据库就不太合适了,当然可以把数据存到分布式数据库HBase中。
HBase目前只支持对rowkey的一级索引,对于二级索引还不支持,当然可以把所有要索引的字段都拼接到rowkey中,根据hbase的filter功能进行查询,
如按照查找一个用户的一段时间的订单,rowkey可以这样设计,rowkey="100022333||2012-12-23:10:20||orderNum",由于hbase在存储时,默认按照rowkey进行排序,这样一个用户的历史数据会集中在一个region中,这样便于顺序的查找。用这种方式的一个弊端是对分页的功能支持的不好,分页所用的总count数量和rowNum,可以在corprocessor中实现记录数量的汇总,但是对于从哪条条记录开始rowNum,则不太好支持,并且总记录数量的汇总需要单独用coprocessor的endpoint来实现,这样就增加了计算量;如果放在客户端做分页,对海量数据来说,是不可行的。
当然可以在Hbase中对该表生成对应的索引表,有几个二级索引就有几张表,如主表的rowkey设计为rowkey="orderNum",那么索引表就是rowkey="usetNum||orderdate",cf="orderNum",同样也会有分页的问题。
下面提出一种sorl+hbase的方式,solr建立索引(solr支持分页的操作),hbase存储数据。
在往HBase写数据的过程中,建立solr索引,可以在HBase的coprocessor的observer功能中实现
public class SorlIndexCoprocessorObserver extends BaseRegionObserver { List<KeyValue> kv2 = put.get("cf".getBytes(), Bytes.toBytes("userNum")); String solrUrl = "http://10.1.1.57:8082/solr"; |
配置coprocessor
alter ‘t1′, METHOD => ‘table_att', ‘coprocessor'=> ‘hdfs:///xxx.jar|com.newcosoft.hadoop.hbase.SorlIndexCoprocessorObserver|1001
一个表上可以配置多个协同处理器,一个序列会自动增长进行标识。加载协同处理器(可以说是过滤程序)需要符合以下规则:
[coprocessor jar file location] | class name | [priority] | [arguments]
对于solr中的commit操作,commit提交后,索引flush到硬盘上,并触发listener,创造新的insexSearcher(新的insexReader,从硬盘中加载索引),这样后续的查询就用新的insexsearcher了对查询性能影响比较大。在批量导入的情况下,可以导入完成后,单独调用sorl的commit操作。
此处采用solr的master,slave方式,master提供索引构建,多个slave提供索引查询;对于master的commit操作,会产生一个新的snapshot,
slave上的Snappuller程序一般是在crontab上面执行的,它会去master询问,有没有新版的snapshot;一旦发现新的版本,slave就会把它下载下来,然后snapinstall。
当一个新的searcher被open的时候,会有一个缓存预热的过程,预热之后,新的索引才会交付使用;这里会控制Snappuller程序的执行频率,solr的优化这里不做深入。
从solr中根据索引字段以及startrow、pagesize查找出对应的历史订单orderNum list后,遍历该list,去hbase中进行查询
String solrUrlSlave = "http://10.1.1.59:8082/solr"; //TODO |
当然关于solr的索引,需要考虑到sorl的HA,有很多策略,这里不做介绍了,后面出单独的章节做阐述
相关推荐
HBase作为分布式列族数据库,能够处理海量数据,并提供快速随机读写能力。而Solr则是一款开源搜索平台,擅长全文检索及高级查询功能。结合这两者可以实现高效的数据管理和灵活的查询服务。 #### 二、环境准备与配置...
Solr 和 HBase 是两种在大数据领域广泛应用的技术。Solr 是一个开源的全文搜索引擎,而 HBase 是基于 Hadoop 的分布式数据库系统。这两者结合使用,可以构建强大的实时搜索和分析平台,尤其适合处理海量非结构化数据...
总结来说,"morphlines.conf"和"morphline-hbase-mapper.xml"是HBase-Solr集成的关键配置文件,它们协同工作,帮助我们构建高效、可扩展的二级索引,从而提升对HBase中海量数据的查询性能。理解并熟练运用这两个配置...
通过REST接口,它将Solr的全文检索能力和HBase的海量数据存储优势相结合,为企业级应用提供了一种高效、灵活的数据查询解决方案。在大数据时代,这样的工具对于优化数据处理流程、提升用户体验具有重要意义。
**HBase-Indexer** 是一个工具,它允许用户通过Apache Solr来高效地对HBase中的数据进行索引和搜索。HBase是基于Google Bigtable设计的一个分布式、面向列的NoSQL数据库,适合处理海量半结构化或非结构化数据。而...
HBase是Apache软件基金会的一个开源项目,它是一个分布式、面向列的NoSQL数据库,构建在Hadoop之上,非常适合处理海量数据。HBase提供了实时读写、强一致性以及水平扩展的能力,常用于大数据分析场景。 描述中的...
在大数据热潮中,推出了NoSQL数据库,这种天生就为分布式存储而设计的技术,尤其以Apache HBase为代表,占领海量数据存储技术的大半壁江山。本教视从实战角度出来,向学员们手把手掌握HBase使用精髓,让学员达到如下...
- **RESTful API**:Solr提供了一个简单的RESTful接口,支持XML、JSON等多种数据格式,便于集成到不同的应用环境中。 - **集群化管理**:Solr支持集群部署,可以通过添加更多的节点来水平扩展系统的处理能力和容错性...
6. **索引**:虽然HBase本身不支持复杂的索引,但可以通过二级索引或者外部索引工具如Solr或Elasticsearch来提升查询性能。 在安装HBase 0.90.5时,你需要先确保你的环境已经正确安装了Hadoop 0.20.2。安装步骤通常...
这样,即使在海量数据中,也能快速定位到目标行。 描述中提到的"hbase-transactional-tableindexed-master"可能是一个包含实现HBase二级索引和事务处理的项目或代码库。在HBase中,事务支持是相对有限的,主要是...
10. **应用场景**:HBase广泛应用于日志分析、物联网数据存储、实时推荐系统等需要大量实时读写和海量数据处理的场景。 这份高清文字版的HBase官方文档,对于开发者、系统管理员和数据工程师来说,是一份宝贵的参考...
总之,HBase是大数据领域的关键组件,特别是在实时读写、大数据分析和海量存储场景下。"hbase-0.98.24"这个版本为用户提供了一个稳定且功能丰富的分布式数据库系统,能够处理大规模的非结构化数据。
该平台融合了多种技术,包括Apache HBase、Phoenix、Spark以及Solr,以支持海量数据的一站式存储、检索和分析。在金融、风控、推荐、社交、电商、新闻、物联网、新零售等多个领域有广泛应用,助力企业实现数据智能化...
- **概念**:HDFS是一种分布式文件系统,设计用于在商用硬件集群上存储海量数据。 - **特点**: - 高容错性:即使部分节点发生故障,数据仍然可用。 - 支持大规模数据集:能够存储PB级别的数据。 - 可扩展性强:...
7. **应用案例**:HBase在互联网公司中广泛应用,如Facebook用于存储用户生成的内容,Twitter用于存储和检索推文,LinkedIn用于存储用户档案等。 8. **生态组件**:HBase生态系统包括Phoenix(SQL接口)、HBase ...
- Solr可以与Hadoop、HBase等大数据技术结合,处理海量数据的搜索需求。 - 使用SolrCloud,实现分布式索引和搜索,支持高可用性和水平扩展。 7. **开发与扩展** - Solr提供了丰富的开发接口,如Java API、...
在Hadoop生态系统中,除了HDFS和MapReduce之外,还有许多其它组件,例如HBase(一个高可扩展的非关系型分布式数据库)、YARN(用于资源管理)、Zookeeper(用于集群管理)、Hive(用于查询和管理大数据)等。...
总的来说,HBase是应对大数据挑战的重要工具,它为海量数据提供了高性能、可扩展的存储解决方案,是大数据领域中不可或缺的一员。理解并掌握HBase的原理和使用方法,对于从事大数据相关工作的人员来说,具有重要的...
在实际应用场景中,云HBase展现出高并发、海量存储的能力,适用于稀疏矩阵存储、图数据、时序数据、消息/订单存储等多种场景。例如,某车联网公司利用HBase处理每辆车10秒上传一次的轨迹数据,实现了300TB+的存储和...