我正在使用OPENTSDB,并且在查询时得到了以下信息:
net.opentsdb.core.IllegalDataException: Found out of order or duplicate data: cell=Cell([-35, 87], [0, 0, 0, 0, 0, 8, -34, 65]), delta=3541, prev cell=Cell([-35, 87], [0, 0, 0, 0, 0, 12, -82, 106]), last_delta=3541, in row=[KeyValue(key=[0, 8, -96, 81, -7, -77, 16, 0, 0, 1, 0, -73, 83, 0, 0, 3, 0, 47, 57, 0, 0, 69, 0, 44, 99, 0, 0, 71, 0, 48, 79, 0, 0, 75, 0, 47, -53, 0, 0, 76, 0, 13, -24, 0, 0, 77, 0, 114, 14, 0, 0, 85, 0, -16, -50], family="t", qualifier="\xDDW", value=[0, 0, 0, 0, 0, 12, -82, 106], timestamp=1375323607530), KeyValue(key=[0, 8, -96, 81, -7, -77, 16, 0, 0, 1, 0, -73, 83, 0, 0, 3, 0, 47, 57, 0, 0, 69, 0, 44, 99, 0, 0, 71, 0, 48, 79, 0, 0, 75, 0, 47, -53, 0, 0, 76, 0, 13, -24, 0, 0, 77, 0, 114, 14, 0, 0, 85, 0, -16, -50], family="t", qualifier=[-35, 87, -35, -41, -34, 103, -32, 7, -32, -57], value=[0, 0, 0, 0, 0, 8, -34, 65, 0, 0, 0, 0, 0, 1, -122, -123, 0, 0, 0, 0, 0, 3, -22, 23, 0, 0, 0, 0, 0, 13, -10, -32, 0, 0, 0, 0, 0, 10, -27, 6, 0], timestamp=1375323057833)] -- run an fsck.
我试过使用fsck --fix,但这是说没有发现错误。
有没有办法:
1.解决此问题,除了手动删除数据点
2.了解发生了什么以及如何预防。
谢谢
最佳答案
解决方案1 :为避免从一开始就发生这种情况,请将tsd.storage.fix_duplicates
中的true
标志设置为opentsdb.conf
。
解决方案2 :如果您已经有重复的值写入Hbase(基础数据存储),并且无法查询openTSDB,请使用fsck
实用程序:在opentsdb/build/
内
特定查询:
./tsdb fsck --fix-all 1h-ago now sum <metric-name> tag1=val1
对于指标:
./tsdb fsck --threads=2 --fix-all --resolve-duplicates 15d-ago sum <metric name>
Full Table :Hbase的“tsdb”表中的所有数据(openTSDB的一个表存储数据)
./tsdb fsck --full-scan --threads=8 --fix-all --resolve-duplicates --compact
有用的
fsck
标志:--fix-all
-设置所有修复标志以尝试一次修复所有问题。请谨慎使用。 --compact
在修复期间压缩未压缩的行。 --delete-bad-compacts
删除似乎已压缩但解析失败的列。如果一列正确解析,但该值的最后字节未设置为0或1,则该列将被保留。 --resolve-duplicates
通过删除除最新或最早的数据点外的所有数据点,启用重复的数据点分辨率。另请参阅--last-write-wins。 --last-write-wins
标志设置后,在解决重复项时将删除除最近写入的数据点以外的所有数据点。如果将配置值tsd.storage.fix_duplicates
设置为true
,则无论该值如何,都将保留最新的数据点。未设置--last-write-wins --full-scan
扫描整个数据表。注意:这可能需要很长时间才能完成。 --threads
整数执行完整扫描时要使用的线程数。默认值为CPU内核数的两倍。