我需要合并hdfs上的lucene索引。编写了lucene提供的普通合并工具的定制版本。代码库如下所示
HdfsDirectory mergedIndex = new HdfsDirectory(new Path("/mergedindex"), new Configuration());
IndexWriter writer = new IndexWriter(mergedIndex, new IndexWriterConfig(new WhitespaceAnalyzer(Version.LUCENE_CURRENT))
.setOpenMode(OpenMode.CREATE));
Directory[] indexes = new BaseDirectory[args.length - 1];
for (int i = 1; i < args.length; i++) {
indexes[i - 1] = new HdfsDirectory(new Path(args[i]), new Configuration());
}
System.out.println("Merging...");
writer.addIndexes(indexes);
System.out.println("Full merge...");
writer.forceMerge(1);
writer.close();
但是它说它不能在目录上获得hdfs锁,因为这是一个超时!超时值在lucene库中硬编码为1000毫秒。
异常跟踪线程“main”org.apache.lucene.store.lockobtainfailedexception中的异常:lock-Get超时:org.apache.solr.store.hdfs。hdfslockfactory$hdfslock@21539796 在org.apache.lucene.store.lock.get(lock。java:89)在org.apache.lucene.index.indexwriter。java:776)在com.test.hadoop.solr.indexer.indexmergetool.main(indexmergetool。java:30)在sun.reflect.nativemethodaccessorimpl.invoke0(本机方法)在sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl)。java:62)在sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl。java:43)在java.lang.reflect.method.invoke(方法。java:497)在org.apache.hadoop.util.runjar.run(runjar。java:221)在org.apache.hadoop.util.runjar.main(runjar。java:136)
有没有什么机制可以克服这一点,以便我可以合并hdfs本身的索引?
提前谢谢,阿伦
1条答案
按热度按时间dldeef671#
请确保删除索引文件夹下的锁定文件并重试。