我正在使用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内核数的两倍。
  • 09-30 20:31