最近工作需要接触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表
在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中的数据不会被清除。
至此,整个过程就结束了,有错误的话,欢迎指正,一起学习一起进步。