【问题标题】:sstableloader corrupt input data using snapshot generated sstablessstableloader 使用快照生成的 sstables 损坏输入数据
【发布时间】:2023-03-08 02:58:02
【问题描述】:

我正在做的事情是合法使用 sstableloader 吗?

我正在将一个表从一个 Cassandra 集群 S 迁移到另一个 T。我有另一台安装了 Cassandra 的机器 (L) 用于运行 sstableloader。所有 Cassandras 都来自 Datastax Enterprise v 4.0.3-1。已使用 cqlsh 手动检查源和目标上表的架构并完全匹配。

源机器 (S) 上的数据和索引 sstables 是使用 nodetool 快照命令准备的,并使用 sstableloader (L) 复制到机器上。来自目标节点之一(集群 T)的 cassandra.yaml 文件被复制到带有 sstableloader (L) 的机器上,并且保存它的目录被放置在 CLASSPATH 中,以便 sstableloader 可以找到配置。

% export CLASSPATH=${HOME}:${HOME}/cassandra.yaml
% sstableloader -d 192.168.4.79,192.168.4.80,192.168.4.81 -v xs/url_table

响应开始于

Established connection to initial hosts
Opening sstables and calculating sections to stream

然后 sstableloader 获取数据文件,报告流式会话 id,然后中止。来自 L 上 sstableloader 的跟踪显示

java.lang.IllegalArgumentException: unable to seek to position 2129 in /home/ajacobs/xs/url_table/xs-url_table-jb-4704-Data.db (1557 bytes) in read-only mode
at org.apache.cassandra.io.util.RandomAccessReader.seek(RandomAccessReader.java:274)
at org.apache.cassandra.streaming.StreamWriter.write(StreamWriter.java:91)
at org.apache.cassandra.streaming.messages.OutgoingFileMessage$1.serialize(OutgoingFileMessage.java:59)
at org.apache.cassandra.streaming.messages.OutgoingFileMessage$1.serialize(OutgoingFileMessage.java:42)
at org.apache.cassandra.streaming.messages.StreamMessage.serialize(StreamMessage.java:45)
at org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.sendMessage(ConnectionHandler.java:383)
at org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.run(ConnectionHandler.java:355)
at java.lang.Thread.run(Thread.java:744)

在 Cassandra 端,来自 T 节点之一的 system.log 文件报告

WARN [STREAM-IN-/192.168.4.75] 2014-07-17 23:00:41,939 StreamSession.java (line 540) [Stream #2c22d370-0e06-11e4-ab07-410b0105b818] Retrying for following error
java.io.IOException: Corrupt input data, block did not start with 2 byte signature ('ZV') followed by type byte, 2-byte length)
at com.ning.compress.lzf.LZFDecoder.decompressChunk(LZFDecoder.java:182)
at com.ning.compress.lzf.LZFInputStream.readyBuffer(LZFInputStream.java:254)
at com.ning.compress.lzf.LZFInputStream.read(LZFInputStream.java:111)
at com.ning.compress.lzf.LZFInputStream.skip(LZFInputStream.java:189)
at java.io.FilterInputStream.skip(FilterInputStream.java:151)
at org.apache.cassandra.streaming.StreamReader.drain(StreamReader.java:117)
at org.apache.cassandra.streaming.StreamReader.read(StreamReader.java:96)
at org.apache.cassandra.streaming.messages.IncomingFileMessage$1.deserialize(IncomingFileMessage.java:47)
at org.apache.cassandra.streaming.messages.IncomingFileMessage$1.deserialize(IncomingFileMessage.java:37)
at org.apache.cassandra.streaming.messages.StreamMessage.deserialize(StreamMessage.java:55)
at org.apache.cassandra.streaming.ConnectionHandler$IncomingMessageHandler.run(ConnectionHandler.java:283)
at java.lang.Thread.run(Thread.java:744)
ERROR [STREAM-IN-/192.168.4.75] 2014-07-17 23:00:41,940 StreamSession.java (line 420) [Stream #2c22d370-0e06-11e4-ab07-410b0105b818] Streaming error occurred
java.lang.IllegalArgumentException: Unknown type 72
at org.apache.cassandra.streaming.messages.StreamMessage$Type.get(StreamMessage.java:89)
at org.apache.cassandra.streaming.messages.StreamMessage.deserialize(StreamMessage.java:54)
at org.apache.cassandra.streaming.ConnectionHandler$IncomingMessageHandler.run(ConnectionHandler.java:283)
at java.lang.Thread.run(Thread.java:744)

【问题讨论】:

    标签: datastax-enterprise


    【解决方案1】:

    sstable 文件被报告为 1557 的事实表明这是一个损坏的 sstable 文件。您可能想确认磁盘上的文件大小。如果它确实已损坏,https://engineering.gosquared.com/dealing-corrupt-sstable-cassandra 可能会有用。

    【讨论】:

      【解决方案2】:

      您需要运行“scrub”来删除损坏的 sstables。

      sh nodetool scrub [键空间名称] [列族名称]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-10
        • 1970-01-01
        • 1970-01-01
        • 2011-02-10
        • 1970-01-01
        相关资源
        最近更新 更多