HBASE同步数据到SOLR

HBase Indexer, 又名key value store indexer, 解析HBASE的日志,生成SOLR语法并插入,简单理解就是HBASE的数据同步到SOLR。

为什么会有这个东西的存在? HBASE不支持事务,也就意味着不支持二级索引,但是在实际的工作当中会发现二级索引的使用非常重要,查询如果光从rowkey来考虑设计,很难,或者说做不到,因此二级索引的组件就产生了。

有一个项目,我们数据都是存储在HBASE中,是一个在线应用,数据分析之后插入到HBASE,并通过echarts展示,图形展示没有问题,但是在有一个页面,因为是多接口调用,一部分信息来自传统数据库,一部分在HBASE,这样导致每个展示调用一次HBASE,信息越多,调用次数越多,这个页面需要大概3秒时间。因此需要考虑优化,图形展示有十几万数据HBASE都可以在1秒显示,但是简单的接口信息,但是调用次数很多反而慢,MySQL就没这个毛病,不用测试啥的,很显然是因为调用次数导致. 我的想法是用SOLR来试试,来代替查询HBASE。 因此才有今天的HBASE同步到SOLR的主题。

整个过程为:

1.为SOLR准备好配置

配置包含2个,一个是morphline-hbase-mapper.xml ,一个是solr schema.xml

morphline的作用是用来对应HBASE字段,field name是SOLR之后会显示的字段,VALUE是目前HBASE的字段

[root@datanode02 t_tool_health_score_final]# cat morphline-hbase-mapper.xml 


        
        
        
        
        
        
        
        
   
   

   
   

[root@datanode02 conf]# cat schema.xml



  id
  
    
      
        
        
        
        
      
    
    
      
        
      
      
        
      
    
    
    
    
    
    
      
        
      
      
        
      
    
    
    
    
    
    
    
    
    
      
        
        
      
    
    
      
        
        
      
    
    
    
    
    
      
        
        
      
    
    
    
    
    
    
    
    
    
      
        
        
        
        
        
      
    
    
      
        
        
        
        
      
    
    
      
        
        
        
        
        
      
    
    
      
        
        
        
        
      
    
    
      
        
        
        
        
      
    
    
      
        
        
        
        
      
    
    
      
        
        
        
        
        
      
    
    
      
        
        
        
        
      
    
    
      
        
        
        
        
        
        
      
      
        
        
        
        
        
        
        
      
    
    
      
        
        
        
        
        
        
      
      
        
        
        
        
        
        
        
      
    
    
      
        
        
        
        
        
        
        
        
      
    
    
      
        
        
        
        
      
    
    
      
        
        
        
        
      
    
    
      
        
        
        
        
        
        
      
    
    
      
        
        
        
        
      
    
    
      
        
        
        
        
        
      
    
    
      
        
        
        
        
        
        
      
    
    
      
        
        
        
      
      
        
        
        
        
      
    
    
      
        
        
        
        
      
      
        
        
        
        
      
    
    
      
        
        
        
        
      
    
    
      
        
        
        
        
        
        
      
    
    
      
        
        
        
        
      
    
    
      
        
        
        
        
      
    
    
      
        
        
        
        
      
    
    
      
        
        
        
        
        
      
    
    
      
        
        
        
        
        
        
        
      
    
    
      
        
        
        
        
      
    
    
      
        
        
        
        
        
      
    
    
      
        
        
        
        
      
    
    
      
        
        
        
        
      
    
    
      
        
        
        
        
      
    
    
      
        
        
        
        
      
    
    
      
        
        
        
        
      
    
    
      
        
        
        
        
      
    
    
      
        
        
        
        
      
    
    
      
        
      
    
    
    
    
  
  
   
   
   
   
   
   
   
   
   
   
  
粗体部分是SOLR字段的一些type, 是否索引等等设置。id字段是唯一键,就是HBASE的rowkey的对应了。


2.初始化SOLR instancedir

   solrctl instancedir --create  t_tool_health_score_final  /opt/hbase-indexers/t_tool_health_score_final


3.建立SOLR collection

   solrctl    collection --create  t_tool_health_score_final  -s 2 -r 2 


4.建立HBASE-SOLR关联,这样HBASE的更新就会自动同步到SOLR

  

   hbase-indexer add-indexer --name  t_tool_health_score_final \
     --indexer-conf /opt/hbase-indexers/t_tool_health_score_final/morphline-hbase-mapper.xml  \
     --connection-param solr.zk=datanode03.isesol.com,datanode04.isesol.com,datanode02.isesol.com,cmserver.isesol.com,datanode01.isesol.com/solr \
     --connection-param solr.collection=t_tool_health_score_final \
     --zookeeper datanode01.isesol.com:2181,datanode02.isesol.com:2181,cmserver.isesol.com:2181,datanode04.isesol.com:2181,datanode03.isesol.com:2181
经过上面4步,SOLR的索引就建立好了,同步关系好了。这个时候SOLR只会同步最新的HBASE插入信息,老的数据是不会同步的,所以需要通过手动把HBASE刷到SOLR里。有一个mapreduce JOB专门用来刷数据,具体如下:

		hadoop --config  /etc/hadoop/conf  jar /opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23/lib/hbase-solr/tools/hbase-indexer-mr-*-job.jar --conf  /etc/hbase/conf/hbase-site.xml -D 'mapred.child.java.opts=-Xmx 1000m'  --hbase-indexer-file /opt/hbase-indexers/t_tool_health_score_final/morphline-hbase-mapper.xml  --zk-host datanode03.isesol.com,datanode04.isesol.com,datanode02.isesol.com,cmserver.isesol.com,datanode01.isesol.com/solr  --collection  t_tool_health_score_final --reducers 0
上面的这些介绍都是简要的,我并没有给出什么太详细的信息。如果有什么疑问,参阅:https://www.cloudera.com/documentation/enterprise/latest/topics/search_about_quick_start.html



你可能感兴趣的:(Hbase)