我正在使用 openTSDB 以 hbase 作为存储系统来存储时间序列数据。
我想知道是否有办法在一段时间后降低数据的分辨率?
我所说的降低数据分辨率的意思是,最初我们有数据以 1/秒的时间分辨率进入。大约 6 个月后,以相同的分辨率存储数据是没有意义的。我想将分辨率降低到 1/min,即在那一分钟内删除 59 个其他数据点。
hbase 或 openTSDB 上是否有包来执行此操作?
感谢您的帮助。
为了在一段时间后删除数据,HBase 对表进行了设置,即TTL - time to live。
ColumnFamilies 可以设置一个以秒为单位的 TTL 长度,一旦到达过期时间,HBase 会自动删除行。这适用于行的所有版本——甚至是当前版本。在 HBase 中为行编码的 TTL 时间以 UTC 指定。
当您在 HBase 之上使用 OpenTSDB 时,它变得非常简单 - 因为它创建了 4 个表tsdb
, tsdb-meta
, tsdb-uid
,tsdb-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 个月)
OpenTSDB 中没有自动化工具可以做到这一点。可以使用其 HTTP API 编写一个,但您必须检索下采样数据,要求它从该间隔中删除所有点,然后再次插入下采样数据。
现在,这可能永远不会在 OpenTSDB 中实现,因为它的关键特性之一是永远以全分辨率存储数据。如果你真的需要这个功能,也许另一个 TSD,比如Graphite会更适合你的要求?