用Lily Hbase indexer 工具包同步Hbase的索引到solr出错
错误堆栈
2019-05-21 06:52:07,181 ERROR [IPC Server handler 8 on 42709] org.apache.hadoop.mapred.TaskAttemptListenerImpl: Task: attempt_1555666124724_2625_m_000005_1 - exited : java.lang.NullPointerException
at org.apache.zookeeper.server.DataTree.copyStat(DataTree.java:340)
at org.apache.zookeeper.ZooKeeper.getData(ZooKeeper.java:1155)
at org.apache.solr.common.cloud.SolrZkClient$7.execute(SolrZkClient.java:352)
at org.apache.solr.common.cloud.SolrZkClient$7.execute(SolrZkClient.java:349)
at org.apache.solr.common.cloud.ZkCmdExecutor.retryOperation(ZkCmdExecutor.java:61)
at org.apache.solr.common.cloud.SolrZkClient.getData(SolrZkClient.java:349)
at org.apache.solr.common.cloud.ClusterState.load(ClusterState.java:257)
at org.apache.solr.common.cloud.ZkStateReader.createClusterStateWatchersAndUpdate(ZkStateReader.java:397)
at org.apache.solr.client.solrj.impl.CloudSolrServer.connect(CloudSolrServer.java:262)
at org.apache.solr.client.solrj.impl.CloudSolrServer.request(CloudSolrServer.java:554)
at org.apache.solr.client.solrj.request.AbstractUpdateRequest.process(AbstractUpdateRequest.java:124)
at org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:68)
at org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:54)
at com.ngdata.hbaseindexer.indexer.DirectSolrInputDocumentWriter.add(DirectSolrInputDocumentWriter.java:104)
at com.ngdata.hbaseindexer.mr.BufferedSolrInputDocumentWriter.flush(BufferedSolrInputDocumentWriter.java:111)
at com.ngdata.hbaseindexer.mr.BufferedSolrInputDocumentWriter.close(BufferedSolrInputDocumentWriter.java:123)
at com.ngdata.hbaseindexer.mr.HBaseIndexerMapper.cleanup(HBaseIndexerMapper.java:350)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:148)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:793)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apac

解决思路
从堆栈信息中可知, 是空指针异常
java.lang.NullPointerException
at org.apache.zookeeper.server.DataTree.copyStat(DataTree.java:340)
at org.apache.zookeeper.ZooKeeper.getData(ZooKeeper.java:1155)
at
具体是哪呢? 是 Lily Hbase Indexer 工具包里面的方法空指针异常了。
从字面上看是从 zookeeper 上拿 solr 的配置信息的时候没有拿到, 返回结果为空, 所以我去 zookeeper 上找了下这个索引的配置, 发现在。
那就奇怪了, 为什么 zookeeper 上有, 但是拿不到呢?
但是我发现 solr 索引的配置文件在 zookeeper 上有太多,导致 zookeeper 数据节点数据量太大,client 端拿不到数据。
解决办法
问题已经找到, zookeeper 数据节点数据量太大。
所以现在有两个解决办法:
- 修改 zookeeper 配置,增加数据节点数据量限制。
- 删除没用 solr 索引。
因为我们索引并不多, 很多都是备份好几个月前的备份数据,所以我选择了第二种方法, 把备份数据缩短到 7 天, 把历史数据都清空了。
重新同步, 成功!
本文讲述用Lily Hbase indexer工具包同步Hbase索引到solr时出错的问题。通过分析错误堆栈,发现是从zookeeper拿solr配置信息时空指针异常,原因是zookeeper数据节点数据量太大。解决办法有修改zookeeper配置或删除没用的solr索引,最终选择后者解决问题。
711

被折叠的 条评论
为什么被折叠?



