linux - tutorial - para que se usa elastic search
Demasiados archivos abiertos Error en Lucene (3)
El proyecto en el que estoy trabajando es indexar una cierta cantidad de datos (con textos largos) y compararlos con una lista de palabras por intervalo (de 15 a 30 minutos).
Después de un tiempo, digamos la ronda 35, al comenzar a indexar un nuevo conjunto de datos en la ronda 36, ocurrió este error:
[ERROR] (2011-06-01 10:08:59,169) org.demo.service.LuceneService.countDocsInIndex(?:?) : Exception on countDocsInIndex:
java.io.FileNotFoundException: /usr/share/demo/index/tag/data/_z.tvd (Too many open files)
at java.io.RandomAccessFile.open(Native Method)
at java.io.RandomAccessFile.<init>(RandomAccessFile.java:233)
at org.apache.lucene.store.SimpleFSDirectory$SimpleFSIndexInput$Descriptor.<init>(SimpleFSDirectory.java:69)
at org.apache.lucene.store.SimpleFSDirectory$SimpleFSIndexInput.<init>(SimpleFSDirectory.java:90)
at org.apache.lucene.store.NIOFSDirectory$NIOFSIndexInput.<init>(NIOFSDirectory.java:91)
at org.apache.lucene.store.NIOFSDirectory.openInput(NIOFSDirectory.java:78)
at org.apache.lucene.index.TermVectorsReader.<init>(TermVectorsReader.java:81)
at org.apache.lucene.index.SegmentReader$CoreReaders.openDocStores(SegmentReader.java:299)
at org.apache.lucene.index.SegmentReader.get(SegmentReader.java:580)
at org.apache.lucene.index.SegmentReader.get(SegmentReader.java:556)
at org.apache.lucene.index.DirectoryReader.<init>(DirectoryReader.java:113)
at org.apache.lucene.index.ReadOnlyDirectoryReader.<init>(ReadOnlyDirectoryReader.java:29)
at org.apache.lucene.index.DirectoryReader$1.doBody(DirectoryReader.java:81)
at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:736)
at org.apache.lucene.index.DirectoryReader.open(DirectoryReader.java:75)
at org.apache.lucene.index.IndexReader.open(IndexReader.java:428)
at org.apache.lucene.index.IndexReader.open(IndexReader.java:274)
at org.demo.service.LuceneService.countDocsInIndex(Unknown Source)
at org.demo.processing.worker.DataFilterWorker.indexTweets(Unknown Source)
at org.demo.processing.worker.DataFilterWorker.processTweets(Unknown Source)
at org.demo.processing.worker.DataFilterWorker.run(Unknown Source)
at java.lang.Thread.run(Thread.java:636)
Ya he intentado establecer la cantidad máxima de archivos abiertos por:
ulimit -n <number>
Pero después de un tiempo, cuando el intervalo tiene aproximadamente 1050 filas de textos largos, se produce el mismo error. Pero solo ocurrió una vez.
¿Debo seguir el consejo de modificar el mergeFactor de Lucene IndexWriter de (Demasiados archivos abiertos) - SOLR o es esto un problema en la cantidad de datos que se indexan?
También he leído que es una elección entre la indexación por lotes o la indexación interactiva. ¿Cómo se podría determinar si la indexación es interactiva, solo por actualizaciones frecuentes? ¿Debería categorizar este proyecto bajo indexación interactiva?
ACTUALIZACIÓN: estoy agregando un fragmento de mi IndexWriter:
writer = new IndexWriter(dir, new StandardAnalyzer(Version.LUCENE_30), IndexWriter.MaxFieldLength.UNLIMITED);
Parece que maxMerge (? O longitud de campo ...) ya está establecido en ilimitado.
ulimit
verificar si el valor de ulimit
se ha conservado y establecerse en un valor adecuado (sea el máximo).
Es muy probable que su aplicación no esté cerrando correctamente los lectores / escritores de índices. He visto muchas historias como esta en la lista de correo de Lucene y casi siempre era la aplicación del usuario la culpable, no el propio Lucene.
Use el índice compuesto para reducir el conteo de archivos. Cuando se establece este indicador, lucene escribirá un segmento como un único archivo .cfs en lugar de varios archivos. Esto reducirá significativamente la cantidad de archivos.
IndexWriter.setUseCompoundFile(true)
Ya usé el ulimit pero el error aún se muestra. Luego inspeccioné los adaptadores de núcleo personalizados para las funciones de lucene. Resulta que hay demasiados directorios IndexWriter.open que están ABIERTOS.
Debe tener en cuenta que después del procesamiento, siempre llamará al cierre del directorio abierto.