我正在使用Spark编写一个繁重的应用程序,需要在集群上安装50台机器来读取/写入图形。
目前,我正在本地测试它,这意味着有 50 个线程并行启动。它们中的每一个都初始化数据库连接。
由于某种原因,我收到此错误:
16/03/16 21:18:19 WARN state.meta: [Jacob "Jake" Fury] failed to find dangling indices
java.nio.file.FileSystemException: /tmp/searchindex/data/elasticsearch/nodes/32/indices: Too many open files
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:91)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
at sun.nio.fs.UnixFileSystemProvider.newDirectoryStream(UnixFileSystemProvider.java:427)
at java.nio.file.Files.newDirectoryStream(Files.java:457)
at org.elasticsearch.env.NodeEnvironment.findAllIndices(NodeEnvironment.java:530)
at org.elasticsearch.gateway.local.state.meta.LocalGatewayMetaState.clusterChanged(LocalGatewayMetaState.java:245)
at org.elasticsearch.gateway.local.LocalGateway.clusterChanged(LocalGateway.java:215)
at org.elasticsearch.cluster.service.InternalClusterService$UpdateTask.run(InternalClusterService.java:467)
at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.runAndClean(PrioritizedEsThreadPoolExecutor.java:188)
at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:158)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
我在配置文件中根本没有使用 ElasticSearch。 我所有的索引都是复合的。Titan DynamoDB 实施是否在内部使用它?如何解决此异常?
这与 Titan 的 DynamoDB 实现没有直接关系,但错误Too many open files
是 *nix os 的一个相当普遍的问题。
挖掘有关如何提高操作系统中打开文件数量的信息,问题就会消失(例如,如何在 Ubuntu 中增加 Neo4j 的最大文件打开限制 (ulimit)?)。