自学大数据:基于Solr实现HBase的文本索引
2014-10-09 13:47
387 查看
前言
最近接触的项目中,需要针对HBase的数据进行索引查询,主要支持中文查询,分页查询等。在此情况下,学习了搜索服务器solr。总结了一些方法和经验,正好可以分享个大家,鼓励自己,共同学习。
使用目的
HBase目前只支持对rowkey的一级索引,对于二级索引还不支持,当然可以把所有要索引的字段都拼接到rowkey中,根据hbase的filter功能进行查询,但是这样操作数据会涉及到全表扫描,效率很低,速度慢,不利于后期扩展。并且,通过HBase自己的索引,实现数据量统计,分页,中文索引几乎不可能。所以,基于solr为HBase创建索引,就显得更有价值。
名词解析
Solr: Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http
Get操作提出查找请求,并得到XML格式的返回结果。
原理
基于Solr的HBase多条件查询原理很简单,将HBase表中涉及条件过滤的字段和rowkey在Solr中建立索引,通过Solr的多条件查询快速获得符合过滤条件的rowkey值,拿到这些rowkey之后在HBASE中通过指定rowkey进行查询。
环境搭建
基于tomcat服务器搭建solr的运行环境,参照slor官网
Solr with Apache Tomcat
建立索引实现方式
目前主流的通过solr在HBase之上建立索引,有三种方式:
1、 第一种方案是通过HBase的普通API获取数据建立索引
优点:HBase与Solr彼此没有任何耦合,通过外部java程序来控制索引的创建修改,整个系统的高可用性和容错性有保证。
缺点:效率较低。每秒处理125条数据(加大线程可以提高效率)
基于本人PC测试:
线程数设置为10个,每秒可以处理294条数据
线程数设置为20个,每秒可以处理410条数据
线程数设置为25个,每秒可以处理376条数据
线程数设置为30个,每秒可以处理382条数据
2、 第二种方案是用到HBase的Mapreduce框架
优点:分布式并行执行效率特别高,处理1000万条数据仅需5分钟
缺点:但是这种高并发需要对Solr服务器进行配置调优,不然会抛出服务器无法响应的异常。适合批量处理,数据量较小时不适合。
3、 第三种方案是在往HBase写数据的过程中,触发HBase的coprocessor的observer功能调用solr服务,建立solr索引。是在Base的中实现。
优点:外部调用端不需要考虑solr索引的建立问题,只需要调用HBase操作数据,索引的建立交给HBase调用Solr实现。
缺点:协处理器运行在和RegionServer相同的进程空间里,出错的协处理器有潜在可能使进程崩溃,导致HBase的数据出错。
综上所述,考虑到HBase集群的高可用性、容错性、扩展性等,建议主要使用第一种方案建立索引,第二种方案为辅助。
最近接触的项目中,需要针对HBase的数据进行索引查询,主要支持中文查询,分页查询等。在此情况下,学习了搜索服务器solr。总结了一些方法和经验,正好可以分享个大家,鼓励自己,共同学习。
使用目的
HBase目前只支持对rowkey的一级索引,对于二级索引还不支持,当然可以把所有要索引的字段都拼接到rowkey中,根据hbase的filter功能进行查询,但是这样操作数据会涉及到全表扫描,效率很低,速度慢,不利于后期扩展。并且,通过HBase自己的索引,实现数据量统计,分页,中文索引几乎不可能。所以,基于solr为HBase创建索引,就显得更有价值。
名词解析
Solr: Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http
Get操作提出查找请求,并得到XML格式的返回结果。
原理
基于Solr的HBase多条件查询原理很简单,将HBase表中涉及条件过滤的字段和rowkey在Solr中建立索引,通过Solr的多条件查询快速获得符合过滤条件的rowkey值,拿到这些rowkey之后在HBASE中通过指定rowkey进行查询。
环境搭建
基于tomcat服务器搭建solr的运行环境,参照slor官网
Solr with Apache Tomcat
建立索引实现方式
目前主流的通过solr在HBase之上建立索引,有三种方式:
1、 第一种方案是通过HBase的普通API获取数据建立索引
优点:HBase与Solr彼此没有任何耦合,通过外部java程序来控制索引的创建修改,整个系统的高可用性和容错性有保证。
缺点:效率较低。每秒处理125条数据(加大线程可以提高效率)
基于本人PC测试:
线程数设置为10个,每秒可以处理294条数据
线程数设置为20个,每秒可以处理410条数据
线程数设置为25个,每秒可以处理376条数据
线程数设置为30个,每秒可以处理382条数据
2、 第二种方案是用到HBase的Mapreduce框架
优点:分布式并行执行效率特别高,处理1000万条数据仅需5分钟
缺点:但是这种高并发需要对Solr服务器进行配置调优,不然会抛出服务器无法响应的异常。适合批量处理,数据量较小时不适合。
3、 第三种方案是在往HBase写数据的过程中,触发HBase的coprocessor的observer功能调用solr服务,建立solr索引。是在Base的中实现。
优点:外部调用端不需要考虑solr索引的建立问题,只需要调用HBase操作数据,索引的建立交给HBase调用Solr实现。
缺点:协处理器运行在和RegionServer相同的进程空间里,出错的协处理器有潜在可能使进程崩溃,导致HBase的数据出错。
综上所述,考虑到HBase集群的高可用性、容错性、扩展性等,建议主要使用第一种方案建立索引,第二种方案为辅助。
相关文章推荐
- 基于solr实现hbase的二级索引
- 基于solr实现hbase的二级索引
- 基于Solr实现HBase的二级索引
- 基于solr实现hbase的二级索引
- 大数据架构-使用HBase和Solr配置存储与索引
- 基于Solr DIH实现MySQL表数据全量索引和增量索引
- 一脸懵逼学习HBase---基于HDFS实现的。(Hadoop的数据库,分布式的,大数据量的,随机的,实时的,非关系型数据库)
- Solr(搜索引擎服务)和MongoDB通过mongodb-connector进行数据同步的解决方案,以及遇到的各种坑的总结(针对solr-5.3.x版本),mongodb和solr实现实时增量索引
- 基于Solr的Hbase二级索引
- 第三步solr实现MySQL 数据库数据表索引
- 基于HBase的海量数据实时查询系统设计与实现
- solr学习第七课----solr之数据库数据导入生成索引(DataImportHandler)-基于solr搜索引擎
- 从HBase读取数据提交到Solr建立索引
- hbase基于solr配置二级索引
- 大数据架构-使用HBase和Solr将存储与索引放在不同的机器上
- hbase基于solr的实时索引
- 使用Coprocessor实现hbase+solr数据交互
- HBase高级特性:通过Coprocessor实现Solr Cloud二级索引
- 基于hbase mapreduce和coprocessor实现hbase二级索引创建与自动维护
- SolrCloud索引富文本数据