ks_indexer同步HBase数据到Solr多值错误处理

问题


1.操作



2.报错异常信息:
org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException:ERROR:
 [doc=7] multiple values encountered for non multiValued field col1:[test, test]
  at  org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:519)   
  at  org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:207)   
  at   org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:202)   
  at  org.apache.solr.client.solrj.impl.LBHttpSolrServer.doRequest(LBHttpSolrServer.java:312)   
  at  org.apache.solr.client.solrj.impl.LBHttpSolrServer.request(LBHttpSolrServer.java:273)   
  at   org.apache.solr.client.solrj.impl.CloudSolrServer.request(CloudSolrServer.java:310)   
  at  org.apache.solr.client.solrj.request.AbstractUpdateRequest.process(AbstractUpdateRequest.java:117)   
  at  org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:116)   
  at   org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:102)   
  at  com.ngdata.hbaseindexer.indexer.DirectSolrInputDocumentWriter.retryAddsIndividually(DirectSolrInputDocumentWriter.java:123)   
  at  com.ngdata.hbaseindexer.indexer.DirectSolrInputDocumentWriter.add(DirectSolrInputDocumentWriter.java:108)   
  at  com.ngdata.hbaseindexer.indexer.Indexer.indexRowData(Indexer.java:140)   
  at  com.ngdata.hbaseindexer.indexer.IndexingEventListener.processEvents(IndexingEventListener.java:84)   
  at   com.ngdata.sep.impl.SepEventExecutor$1.run(SepEventExecutor.java:97)   
  at  java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)   
  at  java.util.concurrent.FutureTask.run(FutureTask.java:262)   
  at  java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)   
  at  java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)   
  at   java.lang.Thread.run(Thread.java:744)




3.solr对应Collection中的schema.xml定义:
		<dynamicField name="*_i" type="int" indexed="true"
			stored="true" multiValued="false" />
		<dynamicField name="*_l" type="long" indexed="true"
			stored="true" multiValued="false" />
		<dynamicField name="*_f" type="double" indexed="true"
			stored="true" multiValued="false" />
		<dynamicField name="*_d" type="string" indexed="true"
			stored="true" multiValued="false" />
		<dynamicField name="*" type="string" indexed="true"
			stored="true" multiValued="false" />
		<field name="*_busi_" type="string" indexed="true" stored="true" />

分析&处理

ks_indexer使用zk记录通过不hbase日志同步点,把RegionServer的HBase日志,以增量方式,同步到Solr中,同步可按频率或者数据量触发。HBase中,同一row-key对应的记录,在统一同步点时,根据row-key做合并处理,同一个非id字段,会出现多值情况,schema.xml没设置multiValued="true",同步线程代码会抛上面错误信息。
处理方式有两种:

1.如果字段没排序需求,设置 multiValued="true",即可解决field多值问题

2.如果字段有排序需求,hbase数据多版本没业务需求,即可通过修改SolrInputField,保证同一个doc中的field只有单值。




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值