4

我正在使用 openTSDB 以 hbase 作为存储系统来存储时间序列数据。

我想知道是否有办法在一段时间后降低数据的分辨率?

我所说的降低数据分辨率的意思是,最初我们有数据以 1/秒的时间分辨率进入。大约 6 个月后,以相同的分辨率存储数据是没有意义的。我想将分辨率降低到 1/min,即在那一分钟内删除 59 个其他数据点。

hbase 或 openTSDB 上是否有包来执行此操作?

感谢您的帮助。

4

2 回答 2

3

为了在一段时间后删除数据,HBase 对表进行了设置,即TTL - time to live

ColumnFamilies 可以设置一个以秒为单位的 TTL 长度,一旦到达过期时间,HBase 会自动删除行。这适用于行的所有版本——甚至是当前版本。在 HBase 中为行编码的 TTL 时间以 UTC 指定。


当您在 HBase 之上使用 OpenTSDB 时,它变得非常简单 - 因为它创建了 4 个表tsdb, tsdb-meta, tsdb-uidtsdb-tree其中tsdb一个巨大的表是 OpenTSDB 放置整个数据的地方。因此,要设置删除时间,我们只需要更改tsdb表的 conf。

根据文档(上面)的摘录TTL可以设置为column family-tsdb有一个 cf ie t,这是为了满足最低要求,即 HBase 需要一个表至少有一个列族。

您可以通过 shell 检查 的当前值TTL

hbase> describe 'tsdb'

Table tsdb is ENABLED
tsdb, {NAME => 't', VERSIONS => 1, COMPRESSION => 'NONE', TTL => 'FOREVER'}

使用 HBase shell - 设置TTL

hbase> alter ‘tsdb′, NAME => ‘t′, TTL => 8640000

8640000秒数等于 100 天(大约 3 个月)

于 2016-07-31T10:25:02.777 回答
1

OpenTSDB 中没有自动化工具可以做到这一点。可以使用其 HTTP API 编写一个,但您必须检索下采样数据,要求它从该间隔中删除所有点,然后再次插入下采样数据。

现在,这可能永远不会在 OpenTSDB 中实现,因为它的关键特性之一是永远以全分辨率存储数据。如果你真的需要这个功能,也许另一个 TSD,比如Graphite会更适合你的要求?

于 2015-03-11T11:56:07.487 回答