文件被另一个进程 Cassandra 使用

File is used by another process Cassandra

我在 Windows 7 中使用 Cassandra 2.0.11。我有一个包含超过 40 个 table 创建查询的 cql 文件,我正在使用 System.Diagnostics.Process.我正在使用该过程调用 cqlsh 批处理脚本以 运行 此命令:cqlsh -f file.cql host

我有这个例外:

ERROR [NonPeriodicTasks:1] 2017-06-16 12:50:38,461 CassandraDaemon.java (line 199) Exception in thread Thread[NonPeriodicTasks:1,5,main]
FSWriteError in ...\system\schema_columnfamilies\system-schema_columnfamilies-jb-42-Index.db
    at org.apache.cassandra.io.util.FileUtils.deleteWithConfirm(FileUtils.java:122)
    at org.apache.cassandra.io.util.FileUtils.deleteWithConfirm(FileUtils.java:108)
    at org.apache.cassandra.io.sstable.SSTable.delete(SSTable.java:145)
    at org.apache.cassandra.io.sstable.SSTableDeletingTask.run(SSTableDeletingTask.java:86)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access1(Unknown Source)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.nio.file.FileSystemException: ...\system\schema_columnfamilies\system-schema_columnfamilies-jb-42-Index.db: The process cannot access the file because it is being used by another process.

    at sun.nio.fs.WindowsException.translateToIOException(Unknown Source)
    at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
    at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
    at sun.nio.fs.WindowsFileSystemProvider.implDelete(Unknown Source)
    at sun.nio.fs.AbstractFileSystemProvider.delete(Unknown Source)
    at java.nio.file.Files.delete(Unknown Source)
    at org.apache.cassandra.io.util.FileUtils.deleteWithConfirm(FileUtils.java:118)
    ... 10 more

此问题(以及其他一些问题)是阻止 Cassandra 运行在版本 3.x 之前的 Windows 上正常运行的原因。 Windows 不喜欢多个进程同时访问同一个文件。

基本上,您在这里有两个选择:

  • 将 Cassandra 升级到(至少)3.10。当然,您不能直接从 2.0 升级到 3.x,因此您需要先升级到 2.1。 2.0 系列不久前就已停产,因此升级是您应该考虑的事情,无论如何。
  • 运行 Linux 上的卡桑德拉。虽然 3.x 终于在 Windows 上得到支持,但 Windows 上的 Cassandra 仍然是一个非常新的事物。 运行成功集群(仍然)的最佳机会是 运行 它在 Linux。