我在两台不同的机器上工作,都有不同的硬盘存储和不同的卡桑德拉版本。
机器1
固态硬盘,卡桑德拉2.1.13
机器2
硬盘,卡桑德拉2.1.3
现在,我使用sstableloader实用程序将一个cf的数据从机器2传输到机器1。直到这一步,它工作良好,数据也被成功传输。
但我错误地截断了机器2上相同cf的数据。为了恢复数据,我使用了相同的概念。我试图把数据从机器1传送到机器2。
同时我发现了一些奇怪的木头
16:22:53.956[main]调试o.a.c.io.sstable.sstablereader-无法
反序列化sstable摘要文件
./data/data/sstableloadertest/typestest-8e68e811f56511e59d60297061e28552/sstableloadertest-typestest-ka-57-概要.db:
无法反序列化sstable摘要组件,因为
磁盘访问模式已更改!
它还删除了sstable的*summary.db组件。
起初我以为这是因为卡桑德拉的版本不同,但我错了。
有谁能告诉我为什么会这样?
最佳答案
删除的摘要文件应该可以。可能值得自己删除它并重新启动服务器。summary file只是将索引存储到分区,并且可以在启动时重建。
默认的磁盘访问模式是auto,这是根据其32位或64位体系结构设置的。所以,您的第一个或第二个系统可能使用32位版本的JDK,而其他系统则不是。签入日志,应该有一行
INFO [main] 2016-03-16 16:45:11,464 CassandraDaemon.java:424 - JVM vendor/version: Java HotSpot(TM) 64-Bit Server VM/1.8.0_45
如果machine2运行64位,而machine1是32位jvm,那么只需将cassandra.yaml中的
disk_access_mode
属性设置为standard
。如果machine2正在运行32位jvm,而machine1为64位,请升级machine2上的jvm。但这可能会导致为其他模式设置的所有其他摘要文件出现问题。因此,最终它应该可以让它得到重建。
11
[2]https://github.com/apache/cassandra/blob/8097d390a285c20aa47954750a80d176a826e47b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java#L313
关于database - sstableLoader的异常行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36280089/