【问题标题】:Lucene indexing on Hadoop file system (HDFS)Hadoop 文件系统 (HDFS) 上的 Lucene 索引
【发布时间】:2015-09-27 08:59:02
【问题描述】:

我需要合并保存在 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 毫秒。

异常跟踪 线程“主”org.apache.lucene.store.LockObtainFailedException 中的异常:锁定获取超时:org.apache.solr.store.hdfs.HdfsLockFactory$HdfsLock@21539796 在 org.apache.lucene.store.Lock.obtain(Lock.java:89) 在 org.apache.lucene.index.IndexWriter.(IndexWriter.java:776) 在 com.test.hadoop.solr.indexer.IndexMergeTool.main(IndexMergeTool.java:30) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:497) 在 org.apache.hadoop.util.RunJar.run(RunJar.java:221) 在 org.apache.hadoop.util.RunJar.main(RunJar.java:136)

是否有任何机制可以克服这个问题,以便我可以合并 HDFS 本​​身的索引?

提前致谢, 阿伦

【问题讨论】:

    标签: hadoop indexing solr lucene hdfs


    【解决方案1】:

    请务必删除索引文件夹下的锁定文件并尝试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 2015-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多