【问题标题】:Scale cassandra Streaming error (Null Pointer Exception)Scale cassandra Streaming 错误(空指针异常)
【发布时间】:2017-03-02 20:16:26
【问题描述】:

我们有一个包含大约 40GB 数据的单节点集群。我们正在尝试扩展并向集群添加第二个节点,但无法做到。 种子节点开始流式传输数据,但一段时间后抛出错误。 错误是:

ERROR [STREAM-OUT-/10.0.0.166] 2016-06-21 12:18:40,300 StreamSession.java:520 - [Stream #862ed0e0-37a7-11e6-b0b9-3fa2170fe9a5] Streaming error occurred
java.lang.NullPointerException: null
    at org.apache.cassandra.db.SerializationHeader$Component.access$500(SerializationHeader.java:283) ~[apache-cassandra-3.3.jar:3.3]
    at org.apache.cassandra.db.SerializationHeader$Serializer.serialize(SerializationHeader.java:430) ~[apache-cassandra-3.3.jar:3.3]
    at org.apache.cassandra.streaming.messages.FileMessageHeader$FileMessageHeaderSerializer.serialize(FileMessageHeader.java:208) ~[apache-cassandra-3.3.jar:3.3]
    at org.apache.cassandra.streaming.messages.OutgoingFileMessage.serialize(OutgoingFileMessage.java:84) ~[apache-cassandra-3.3.jar:3.3]
    at org.apache.cassandra.streaming.messages.OutgoingFileMessage$1.serialize(OutgoingFileMessage.java:48) ~[apache-cassandra-3.3.jar:3.3]
    at org.apache.cassandra.streaming.messages.OutgoingFileMessage$1.serialize(OutgoingFileMessage.java:40) ~[apache-cassandra-3.3.jar:3.3]
    at org.apache.cassandra.streaming.messages.StreamMessage.serialize(StreamMessage.java:48) ~[apache-cassandra-3.3.jar:3.3]
    at org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.sendMessage(ConnectionHandler.java:363) ~[apache-cassandra-3.3.jar:3.3]
    at org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.run(ConnectionHandler.java:335) ~[apache-cassandra-3.3.jar:3.3]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_72-internal]

当我执行 nodetool bootstrap resume 时,它​​会再次开始流式传输数据,但会引发相同的错误。

cassandra 3.3 中是否有任何错误或我可能做错了什么。

【问题讨论】:

标签: java nullpointerexception cassandra


【解决方案1】:

关于这个ticket

你检查过这个,也许可能的解决方案?

  1. 获取您的架构:DESC SCHEMA;
  2. 在新节点上使用 cqlsh。
  3. 导入架构。
  4. 将新节点添加到集群中。

或者您可以更新到 Cassandra 3.4

//编辑 sanjeev 修好了。 SSTable 不在 Cassandra 版本中。

nodetool upgradesstables

解决了这个问题。

【讨论】:

  • 你提到的票是针对不同的例外,而不是我得到的。
  • 是的,我知道,但你检查了吗?
  • 两者是完全不同的例外。在引发异常之前,还会在节点之间传输一些数据。
  • 啊,好吧。您的表中有空字段吗?也许传输将停止,因为一行中有一个空字段。您是否检查过,也许在一个新的干净开发节点上,用空字符串覆盖它?我知道这不是很好,但是当它有帮助时,它是一个可以接受的解决方法。
  • 我不确定,但应该有忽略空行/列数据的机制。
【解决方案2】:

遇到了类似的问题。

根据我的日志:

cat /var/log/cassandra/system.log

找到:

Caused by: java.io.FileNotFoundException: /home/cassandra/data/system/compactions_in_progress-55080ab05d9c388690a4acb25fe1f77b/system-compactions_in_progress-tmp-ka-72-Data.db (No space left on device)

发布:

df -h

并检查cassandra的数据和commitlogs所在分区的剩余空间。可能您正在使用默认值 (/var/lib) 并且根分区可能已满(通常在 OS 安装中默认为 50 Gb,包括 /var)

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 2013-03-22
    • 2020-04-29
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多