java.io.EOFException 使用 sstabledump
java.io.EOFException using sstabledump
我有一个脚本可以从 gcloud 下载使用 sstabledump 所需的所有文件,然后将它们转储到 json
但出于某种原因我得到了这个错误:
java.io.EOFException
at org.apache.cassandra.io.util.RebufferingInputStream.readByte(RebufferingInputStream.java:180)
at org.apache.cassandra.io.util.RebufferingInputStream.readPrimitiveSlowly(RebufferingInputStream.java:142)
at org.apache.cassandra.io.util.RebufferingInputStream.readInt(RebufferingInputStream.java:222)
at org.apache.cassandra.io.sstable.metadata.MetadataSerializer.deserialize(MetadataSerializer.java:157)
at org.apache.cassandra.io.sstable.metadata.MetadataSerializer.deserialize(MetadataSerializer.java:132)
at org.apache.cassandra.tools.Util.metadataFromSSTable(Util.java:317)
at org.apache.cassandra.tools.SSTableExport.main(SSTableExport.java:144)
java.io.EOFException
at org.apache.cassandra.io.util.RebufferingInputStream.readByte(RebufferingInputStream.java:180)
at org.apache.cassandra.io.util.RebufferingInputStream.readPrimitiveSlowly(RebufferingInputStream.java:142)
at org.apache.cassandra.io.util.RebufferingInputStream.readInt(RebufferingInputStream.java:222)
at org.apache.cassandra.io.sstable.metadata.MetadataSerializer.deserialize(MetadataSerializer.java:157)
at org.apache.cassandra.io.sstable.metadata.MetadataSerializer.deserialize(MetadataSerializer.java:132)
at org.apache.cassandra.tools.Util.metadataFromSSTable(Util.java:317)
at org.apache.cassandra.tools.SSTableExport.main(SSTableExport.java:144)
知道为什么会发生这种情况吗?
这表明一个(或多个)SSTables 不完整或损坏。
抛出文件结束异常 (EOFException
),因为 SSTable 元数据指示 *-Data.db
文件中还有更多数据,但已到达文件末尾。
如果您从实时 data/*
子目录复制文件,这是预料之中的,因为文件不一定 (a) 完全刷新到磁盘,或 (b) 尚未完全压缩。
我建议你做一个nodetool snapshot
并且只从snapshots/*
子目录复制SSTables以确保文件完全一致。干杯!
我有一个脚本可以从 gcloud 下载使用 sstabledump 所需的所有文件,然后将它们转储到 json 但出于某种原因我得到了这个错误:
java.io.EOFException
at org.apache.cassandra.io.util.RebufferingInputStream.readByte(RebufferingInputStream.java:180)
at org.apache.cassandra.io.util.RebufferingInputStream.readPrimitiveSlowly(RebufferingInputStream.java:142)
at org.apache.cassandra.io.util.RebufferingInputStream.readInt(RebufferingInputStream.java:222)
at org.apache.cassandra.io.sstable.metadata.MetadataSerializer.deserialize(MetadataSerializer.java:157)
at org.apache.cassandra.io.sstable.metadata.MetadataSerializer.deserialize(MetadataSerializer.java:132)
at org.apache.cassandra.tools.Util.metadataFromSSTable(Util.java:317)
at org.apache.cassandra.tools.SSTableExport.main(SSTableExport.java:144)
java.io.EOFException
at org.apache.cassandra.io.util.RebufferingInputStream.readByte(RebufferingInputStream.java:180)
at org.apache.cassandra.io.util.RebufferingInputStream.readPrimitiveSlowly(RebufferingInputStream.java:142)
at org.apache.cassandra.io.util.RebufferingInputStream.readInt(RebufferingInputStream.java:222)
at org.apache.cassandra.io.sstable.metadata.MetadataSerializer.deserialize(MetadataSerializer.java:157)
at org.apache.cassandra.io.sstable.metadata.MetadataSerializer.deserialize(MetadataSerializer.java:132)
at org.apache.cassandra.tools.Util.metadataFromSSTable(Util.java:317)
at org.apache.cassandra.tools.SSTableExport.main(SSTableExport.java:144)
知道为什么会发生这种情况吗?
这表明一个(或多个)SSTables 不完整或损坏。
抛出文件结束异常 (EOFException
),因为 SSTable 元数据指示 *-Data.db
文件中还有更多数据,但已到达文件末尾。
如果您从实时 data/*
子目录复制文件,这是预料之中的,因为文件不一定 (a) 完全刷新到磁盘,或 (b) 尚未完全压缩。
我建议你做一个nodetool snapshot
并且只从snapshots/*
子目录复制SSTables以确保文件完全一致。干杯!