当前位置: 首页 > 知识库问答 >
问题:

为什么在卡桑德拉 1.2 中会发生数据损坏?

楮乐邦
2023-03-14

几天前,我在Cassandra 1.2中删除了一列,方法是:1.删除整个表,2.重新创建表,不带列,3.插入插入语句(不带列)。

我之所以那样做,是因为Cassandra 1.2不支持“降列”操作。

今天,由于数据损坏问题,Ops团队通知了我。我的问题:

>

  • 根本原因是什么?
  • 怎么修?

    错误[read stage:79]2014-11-04 11:29:55,021 CassandraDaemon.java(第191行)线程Thread[ReadStage:79,5,main]org . Apache . Cassandra . io . ss table . corruptsstableexception:org . Apache . Cassandra . db . column serializer$CorruptColumnException:无效列名长度0(/data/Cassandra/data/XXX/yyy/zzz-data . db,1799885字节...24更多错误[read stage:89]2014-11-04 11:29:58,076 CassandraDaemon.java(第191行)线程中出现异常Thread[ReadStage:89,5,main]Java . lang . out of memory ERROR:org . Apache . Cassandra . io . util . randomaccessreader . read bytes(randomaccessreader . Java:376)org . Apache . Cassandra . utils . bytebuffer util . read(read

  • 共有1个答案

    江子石
    2023-03-14

    C*1.2支持cql表的列删除-http://www.datastax.com/documentation/cql/3.0/cql/cql_using/use_delete.html

    但是,我看不出您描述的重新创建一个没有列的新表的过程有什么错误。下面是一些前进的步骤。

    >

  • 你看到的腐败是在新表中而不是旧表中(它们同名吗?)

    您的复制因子和节点数足够高,足以使此节点脱机

    您的客户机的负载平衡策略设置得当,这样当一个节点出现故障时,它将故障转移到另一个节点

    1) 使节点脱机

    nodetool drain
    

    这将刷新memtables并使您的节点停止接受请求。

    2) 运行nodetool清理

    nodetool scrub [keyspace][table]
    

    如果这成功完成,那么您就完成了,通过重新启动cassandra并运行nodetool修复keyspace table来备份您的节点。

    3) 如果清除出错(可能是由于损坏错误),请尝试sstablesrush实用程序。ssh到你的盒子里,然后运行:

    < code>sstablescrub

    请注意,使用与启动cassandra相同的操作系统用户运行此操作系统。

    如果这成功完成,那么您就完成了,通过重新启动cassandra并运行nodetool修复keyspace table来备份您的节点。

    4)如果这不起作用(再次出现损坏错误),您将必须删除SStable,并使用repair从其他副本中重建它:

      < li >将问题表从您的数据目录移动到备份目录中 < li >重新启动cassandra(重建后删除) < li> 节点工具修复密钥空间cf -此修复需要时间。

  •  类似资料:
    • 我使用的是spring数据cassandra,需要使用jpa映射一个字段,在cassandra中,该字段的类型为

    • 我目前在cassandra中有一个名为macrecord的表,类似于以下内容: 在这种情况下,我想不出其他解决方案,只有在macadd值重复的情况下删除整行,然后插入具有更新时间戳的新行。 是否有更好的解决方案在macadd值重复时更新时间戳,或者在我的原始表中只有macadd是主键的范围内查询时间戳值的替代方法。

    • 我用Spring Data Cassandra 2.2.1开发了一个新的应用程序,想在Cassandra 2.1.9服务器上运行它(旧的,我知道)。但是我们得到了错误 Spring数据卡桑德拉手册声称Spring数据2.2.1至少需要卡桑德拉2.1,所以这应该有效,但它没有。我们包含的唯一特定于卡桑德拉的依赖项是 我怎样才能让这个工作?

    • 有人可以帮助我了解如何使用POJO类插入卡桑德拉UDT数据吗? 我创建了一个POJO类来映射Cassandra的表,并为Cassandra UDT创建了另一个类,但是当我插入映射Cassandra表的主POJO类时,它无法识别另一个POJO类(映射Cassandra的UDT)。我还在每个类和每个类对象上编写了注释。 这是我的一个POJO类:- 另一个POJO类:-

    • 我对Cassandra相当陌生,在过去的一个月里读了很多书。 我正在研究一个小用例。 查询:基于在某个时间范围内播放的金额排名前 X 的玩家。 因此,在任何给定的时间范围内,我都希望汇总玩家的总游戏次数,并得出排名前X的玩家。 我遵循了创建UDF(使用C*-2.2.0版本)的方法,用于聚合AmountPlay by a Player。 下面是我为这个用例设计的时间序列数据模型。 请让我知道我的数据

    • 我在做一个分布式数据库。我试图生成一个唯一的ID,它将作为Cassandra中的列族主键。 我想知道是否有一种方法可以根据时间生成一个唯一的ID?