【问题标题】:Cassandra Data storage: data directory space not equal to the space occupiedCassandra数据存储:数据目录空间不等于占用空间
【发布时间】:2018-03-04 12:27:02
【问题描述】:

这是关于 Cassandra 架构的初学者问题。

我有一个 3 节点 Cassandra 集群。数据目录位于 $CASSANDRA_HOME/data/data。我已经加载了一个巨大的数据集。我做了nodetool flush 然后nodetool tablestats 在我加载数据的表上。这表示占用的总空间约为 50GiB。我很好奇并检查了每个节点上我的数据目录du $CASSANDRA_HOME/data/data 的大小,每个节点显示大约 1-2GB。数据目录怎么会小于单个表占用的空间?我错过了什么吗?我的表是用replication factor 1创建的

【问题讨论】:

  • 50Gb 什么样的数据?压缩在这里发挥了重要作用。
  • 我的问题更倾向于,即使在压缩时,它是否应该在两个地方都反映相同?
  • @xmas79 未启用压缩。
  • 压缩从一开始就被禁用了吗?请发布 YAML 配置

标签: memory cassandra disk nodetool du


【解决方案1】:

du 给出了分配给它的路径所使用的真实存储容量。这并不总是与这些路径中存储的数据大小直接相关。

与您可能获得的任何其他存储使用信息(例如,来自 Cassandra)相比,有两个主要因素混淆了 du 的输出。

  1. du 给出的数字可能比预期的要小,原因有两个: ⓐ 它结合了硬链接。这意味着如果给它的路径包含硬链接文件(我不会在这里解释硬链接,但这个术语是 Unixish 操作系统的固定术语,因此可以轻松查找),这些都被计算在内只有一次,而文件存在多次。 ⓑ 知道稀疏文件;这些文件包含大量(有时是巨大的)空白区域(零字节)。在许多 Unixish 文件系统中,这些文件可以有效地存储,具体取决于它们的创建方式。
  2. du 可能会给出比预期更大的数字,因为文件系统有一些开销。因此,要存储 n 个字节的文件,需要存储 n + h 个字节。 h 取决于文件系统及其配置。最重要的因素是文件系统通常以块结构存储文件。如果一个文件的大小不完全是文件系统块大小的倍数,则最后需要的块仍然由该文件完全分配,因此如果浪费了它的一些大小。 du 将显示整个块已分配,因为事实上,它是。

因此,在您的情况下,Cassandra 可能会谈论占用 50GiB 的空间,但其中很多可能是空的(从不写入)空间。这可能存储在文件系统上的稀疏文件中,实际上只使用 2GiB 的存储大小(du 显示)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 2020-11-27
    • 1970-01-01
    相关资源
    最近更新 更多