大数据架构-使用HBase和Solr将存储与索引放在不同的机器上
大数据架构-使用HBase和Solr将存储与索引放在不同的机器上
摘要: HBase可以通过协处理器 Coprocessor 的 方式向Solr发出请求,Solr对于接收到的数据可以做相关的同步:增、删、改索引的操作,这样就可以同时使用HBase存储量大和Solr检索性能高 的优点了,更何况HBase和Solr都可以集群。这对海量数据存储、检索提供了一种方式,将存储与索引放在不同的机器上,是大数据 架构的必须品。
关键词: HBase, Solr, Coprocessor , 大数据 , 架构
正如我的之前的博客“ Solr与HBase架构设计 ”中所述,HBase和Solr可以通过协处理器 Coprocessor 的方式向Solr发出请求,Solr对于接收到的数据可以做相关的同步:增、删、改索引的操作。将存储与索引放在不同的机器上,这是大数据架构的必须品,但目前还有很多不懂得此道的同学,他们对于这种思想感到很新奇,不过,这绝对是好的方向,所以不懂得抓紧学习吧。
有个朋友给我的那篇博客留言,说CDH也可以做这样的事情,我还没有试过,他还问我要与此相关的代码,于是我就稍微整理了一下,作为本篇文章的主要内容。关于CDH的事,我会尽快尝试,有知道的同学可以给我留言。
下面我主要讲述一下,我测试对HBase和Solr的性能时,使用HBase 协处理器向HBase添加数据所编写的相关代码,及解释说明。
一、编写HBase协处理器Coprocessor
一旦有数据postPut,就立即对Solr里相应的Core更新。这里使用了 ConcurrentUpdateSolrServer,它是Solr速率性能的保证,使用它不要忘记在Solr里面配置autoCommit哟。
/* *版权:王安琪 *描述:监视HBase,一有数据postPut就向Solr发送,本类要作为触发器添加到HBase *修改时间:2014-05-27 *修改内容:新增 */ package solrHbase.test; import java.io.UnsupportedEncodingException; import ***; public class SorlIndexCoprocessorObserver extends BaseRegionObserver { private static final Logger LOG = LoggerFactory .getLogger(SorlIndexCoprocessorObserver.class); private static final String solrUrl = "http://192.1.11.108:80/solr/core1"; private static final SolrServer solrServer = new ConcurrentUpdateSolrServer( solrUrl, 10000, 20); /** * 建立solr索引 * * @throws UnsupportedEncodingException */ @Override public void postPut(final ObserverContext final Put put, final WALEdit edit, final boolean writeToWAL) throws UnsupportedEncodingException { inputSolr(put); } public void inputSolr(Put put) { try { solrServer.add(TestSolrMain.getInputDoc(put)); } catch (Exception ex) { LOG.error(ex.getMessage()); } } } </td> </tr> </tbody> </table> </div> 注意:getInputDoc是这个HBase协处理器Coprocessor的精髓所在,它可以把HBase内的Put里的内容转化成Solr需要的值。其中 String fieldName = key.substring(key.indexOf( columnFamily ) + 3, key.indexOf( "我在这" )).trim(); 这里有一个乱码字符,在这里看不到,请大家注意一下。
|