HBase Indexer 基于Solr的 HBase 索引

HBase Indexer 基于Solr的 HBase 索引

HBase Indexer Github: https://github.com/DNGiveU/hbase-indexer

Synchronous Replication: http://hbase.apache.org/book.html#syncreplication

Solr: https://lucene.apache.org/solr/resources.html

HBase Index 安装文档:https://github.com/NGDATA/hbase-indexer/wiki/Installation

索引文件配置文档:https://github.com/NGDATA/hbase-indexer/wiki/Tutorial

配置

  1. hbase-indexer-site.xml 配置 zk 连接信息
  2. hbase 修改 hbase-site.xml 复制配置
  3. 构建 hbase indexer 拷贝 hbase-sep-* 至 hbase 的 lib 文件夹下

启动

启动 HBase

开启 HMaster

./start-hbase.sh

开启 region server

./local-regionservers.sh start 1

启动 Solr

基于8.4.0 Solr 的 云模式

$SOLR_HOME/bin/solr -c -z localhost:2181 -e cloud

启动 HBase Indexer

$HBASE_INDEXER_HOME/bin/hbase-indexer server

创建索引

索引文件:

<?xml version="1.0"?>
<indexer table="demo">
  <field name="id_i" value="f:id"/>
  <field name="name_s" value="f:name"/>
</indexer>

命令

创建索引

./bin/hbase-indexer add-indexer -n demo -c demo-indexer.xml -cp solr.zk=localhost:2181/solr -cp solr.collection=demo

删除索引

./bin/hbase-indexer delete-indexer -n demo

调式流程

./bin/hbase-indexer server 启动流程

com.ngdata.hbaseindexer.Main#main
	开启统计 metrics
	startServices 启动 hbase indexer 服务
		初始化 zk (hbaseindexer.zookeeper.connectstring=localhost:2181)
		初始化 hbase 连接
		初始化 indexerModel (保存索引定义数据)
			加载刷新所有的索引定义并通知索引变更监听器
		初始化 SepModelImpl (hbase.zookeeper.quorum=localhost, 无端口); hbase 集群复制订阅管理, hbase 需要配置 hbase.replication=true
			ReplicationAdmin 
		初始化 indexerMaster (批量索引定义任务等等)
		初始化 indexerSupervisor
			IndexerSupervisor#init
				添加索引变更监听器至 indexerModel
				索取所有的索引定义(indexerModel#getValues())并开启索引消费
				IndexerSupervisor#startIndexer	根据索引定义开启索引
						(solrWrite 初始化,索引处理器IndexingEventListener/Indexer等)
					IndexerHandle#start
						SepConsumer#start
							rpcServer#start 开启 region 复制预写入日志

在ngdata mian进程中跟踪:trace com.ngdata.sep.impl.SepConsumer replicateWALEntry

数据写入流程:

@com.ngdata.hbaseindexer.indexer.DirectSolrInputDocumentWriter.add()
        at com.ngdata.hbaseindexer.indexer.Indexer.indexRowData(Indexer.java:155)
        at com.ngdata.hbaseindexer.indexer.IndexingEventListener.processEvents(IndexingEventListener.java:99)
        at com.ngdata.sep.impl.SepEventExecutor$1.run(SepEventExecutor.java:97)
@com.ngdata.sep.impl.SepEventExecutor.scheduleEventBatch()
        at com.ngdata.sep.impl.SepEventExecutor.flush(SepEventExecutor.java:117)
@com.ngdata.sep.impl.SepConsumer.replicateWALEntry()
	at org.apache.hadoop.hbase.protobuf.generated.AdminProtos$AdminService$2.callBlockingMethod(AdminProtos.java:22009)
        at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2112)
        at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:101)
        at org.apache.hadoop.hbase.ipc.FifoRpcScheduler$1.run(FifoRpcScheduler.java:73)
org.apache.hadoop.hbase.ipc.FifoRpcScheduler#dispatch
	CallRunner#Call = [callId: 10 service: AdminService methodName: ReplicateWALEntry size: 263 connection: 192.168.1.93:60752 param: TODO: class org.apache.hadoop.hbase.protobuf.generated.AdminProtos$ReplicateWALEntryRequest connection: 192.168.1.93:60752]
org.apache.hadoop.hbase.ipc.RpcServer.Connection#processRequest
org.apache.hadoop.hbase.ipc.RpcServer.Connection#processOneRpc
org.apache.hadoop.hbase.ipc.RpcServer.Connection#process
org.apache.hadoop.hbase.ipc.RpcServer.Connection#readAndProcess
org.apache.hadoop.hbase.ipc.RpcServer.Listener#doRead
org.apache.hadoop.hbase.ipc.RpcServer.Listener.Reader#doRunLoop
org.apache.hadoop.hbase.ipc.RpcServer.Listener.Reader#run

关键方法

获取HBase数据入口:com.ngdata.sep.impl.SepConsumer#replicateWALEntry

数据批量调度缓冲(Solr写入瓶颈):com.ngdata.sep.impl.SepEventExecutor#scheduleSepEvent

Solr数据写入:com.ngdata.hbaseindexer.indexer.IndexingEventListener#processEvents

# Java  HBase  Solr 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×