大数据学习笔记——使用Solr建立HBASE索引

最近工作需要接触HBase存储数据,并对数据进行加工分析处理。在此将个人学习过程及踩过的坑记录一下,防止个人大脑遗忘,希望在缓解个人脑容量不足的情况下,也能给他人提供帮助。

环境: 阿里云Hbase企业版
流程: Hbase表的创建、数据插入、Solr的Collection创建、Solr索引创建、Java通过Solr访问查询数据。

  • Hbase表、Solr Collection、Solr索引三者之间的关系
    创建Solr索引之前要明确Hbase表、Solr Collection、Solr索引三者之间的关系。Hbase表、Solr Collection两者是相互独立的,均可以直接进行创建,Solr索引是两者的中间桥梁,将二者联系起来,并将Hbase表中的特定Column数据映射到Solr Collection中。其关系如下图:
    Hbase和Solr之间的关系
  • 创建Hbase表
    在Hbase所在的服务器上,下载并安装Hbase客户端,在Hbase目录下,使用如下命令:
./bin/hbase shell

进入Hbase,通过

create 'solrdemo', {NAME=>'info', REPLICATION_SCOPE=>'1'}

创建solrdemo表,并创建info列簇。当然可以建立多个列簇。
在Hbase中,数据的存放方式是以Key-Value的方式存放,即列名-值。表的结构如下表所示:

ROW COL1 COL2
row1 info1 info2

其中ROW相当于Mysql中的ID,COL1表示列簇1,COL2表示列簇2。
其中每一个列簇下,可以分为多个列,比如,COL1下可以新建多个列,info1:name,info1:age等等。
这是Hbase相关的一些知识,有兴趣的可以去详细Hbase,这里就不细说了。

  • 创建Solr Collection
    在使用Solr之前,需要安装配置Solr,然后才能使用网页的方式去访问。配置方式在这里就不细说了,主要说一下,如何通过Solr的Web界面去创建Solr Collection。
    通过用户密码登陆Solr的第一个界面如下所示
    在这里插入图片描述
    通过此界面,可以查看Solr版本、JVM的相关配置、物理内存的使用情况以及JVM的内存使用清空。
    接下来就是建立Collection了,点击页面左侧第四个按钮Collections,再点击Add Collection按钮,出现下图所示界面:
    在这里插入图片描述
    填写,您的Collection的名称、选择config set,初次使用,有两个选项:_default和_indexer_default,这个config是可以自定义创建的,本文暂时不对此做介绍,有兴趣的可以自查学习。最后点击Add Collection按钮,就成功创建Solr Collection了。
    创建成功后,会在此界面出现您的Collection,您可以通过点击它查看其基本信息,具体情况如下图:
    在这里插入图片描述
  • 创建Hbase表和Solr Collection关联的配置文件
    通过上面两个步骤创建完成Hbase表和Solr Collection之后,需要配置xml配置文件,将Hbase表与Solr Collection关联起来。并实现通过Solr查看Hbase数据。
    xml配置文件的一个样例如下所示:
<indexer table="solrdemo">
   <field name="name_s" value="info:name" type="string" />
   <param name="update_version_l" value="true"/>
</indexer>

其中,table对应Hbase表的名称,field中,name表示Solr Collection中显示的字段名称,如果使用Solr默认的config set,那么,name 的命名需要按照一定的方式,比如此例,因为field中,type为string类型,则name 的命名为name_s,其中s表示string。如果是其它类型,则需要添加不同的标志,具体的情况,请参考下面:

    <dynamicField name="*_i"  type="pint"    indexed="true"  stored="true"/>
    <dynamicField name="*_is" type="pints"    indexed="true"  stored="true"/>
    <dynamicField name="*_s"  type="string"  indexed="true"  stored="true" />
    <dynamicField name="*_ss" type="strings"  indexed="true"  stored="true"/>
    <dynamicField name="*_l"  type="plong"   indexed="true"  stored="true"/>
    <dynamicField name="*_ls" type="plongs"   indexed="true"  stored="true"/>
    <dynamicField name="*_t" type="text_general" indexed="true" stored="true" multiValued="false"/>
    <dynamicField name="*_txt" type="text_general" indexed="true" stored="true"/>
    <dynamicField name="*_b"  type="boolean" indexed="true" stored="true"/>
    <dynamicField name="*_bs" type="booleans" indexed="true" stored="true"/>
    <dynamicField name="*_f"  type="pfloat"  indexed="true"  stored="true"/>
    <dynamicField name="*_fs" type="pfloats"  indexed="true"  stored="true"/>
    <dynamicField name="*_d"  type="pdouble" indexed="true"  stored="true"/>
    <dynamicField name="*_ds" type="pdoubles" indexed="true"  stored="true"/>
    <dynamicField name="*_str" type="strings" stored="false" docValues="true" indexed="false" />
    <dynamicField name="*_dt"  type="pdate"    indexed="true"  stored="true"/>
    <dynamicField name="*_dts" type="pdate"    indexed="true"  stored="true" multiValued="true"/>
    <dynamicField name="*_p"  type="location" indexed="true" stored="true"/>
    <dynamicField name="*_srpt"  type="location_rpt" indexed="true" stored="true"/>

  • 创建Solr索引
    配置好xml文件之后,采用如下命令创建Solr索引,将Hbase表与Solr Collection关联起来。

    ./solr-7.3.1/bin/solr-indexer add -n indexerName -f xml path -c solr collection
    其中,indexerName为您希望的Solr索引名称,xml path为xml配置文件的路径,
    solr Collection为上面步骤中创建的solr Collection名称
    

    创建Solr索引之后,通过如下命令,查看Solr索引是否创建成功以及索引状态

    查看solr的所有索引
    ./solr-7.3.1/bin/solr-indexer list
    
    查看指定Hbase表的索引状况
    ./solr-7.3.1/bin/solr-indexer list -dump -t solrdemo
    其中solrdemo为Hbase表的名称
    
    对Hbase表中已有数据进行索引创建
    ./solr-7.3.1/bin/solr-indexer rebuild -n indexerName -t solrdemo -r 10
    其中,indexerName为索引名称,solrdemo为Hbase表的名称
    
    查看Hbase表中已有数据进行索引创建的状态
    ./solr-7.3.1/bin/solr-indexer rebuild-status -n indexerName -t solrdemo
    其中,indexerName为索引名称,solrdemo为Hbase表的名称
    

    如果后期,您修改了xml配置文件,可以通过如下命令使其生效:

    ./solr-7.3.1/bin/solr-indexer update -n indexerName -f xml path -c solr collection -w 3000
    其中,indexerName为您希望的Solr索引名称,xml path为xml配置文件的路径,
    solr Collection为上面步骤中创建的solr Collection名称,3000为3s后生效
    

    创建索引之后,在往Hbase中推送数据,则自动创建索引。

  • 通过Solr访问Hbase数据
    如果您的Solr索引创建成功,并对Hbase表中的已有数据成功进行索引创建,则可以通过Solr直接查询访问Hbase表中的数据。
    打开Solr界面,通过左侧目录栏,下方下拉菜单中选择您的Solr Collection,将出现该Collection的相关信息,如下图所示:
    在这里插入图片描述
    点击Query通过条件查询Hbase数据,查询结果如下图所示
    在这里插入图片描述
    也可以通过Solr界面下发一下指令对Solr数据进行操作,操作界面为Documents,其界面情况如下图:
    在这里插入图片描述
    举个例子,希望将Solr Collection中的所有数据删除清空,首先需要将Docment Type修改为XML,然后下发如下指令:

<delete><query>*:*</query></delete>
<commit/>

再点击Submit Document即可将Solr Collection中的数据清空,但是Hbase中的数据不会被清除

至此,整个过程就结束了,有错误的话,欢迎指正,一起学习一起进步。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章