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