私は分詞でビッグデータと HBase の初心者です。現在、OpenTSDB を使用してセンサーからのデータを保存しようとしています。
構成は次のとおりです。最後の安定した OpenTSDB がインストールされた Cloudera vmware イメージ。設定後、サーバーを起動しました
./build/tsdb tsd --port=4242 --staticroot=build/staticroot/ --cachedir=/tmp/tsd/ --auto-metric
次に、単純な netcat クライアントを実行しました。
#!/bin/bash
set -e
while true; do
./run $1 $2
sleep 1
done | nc -w 30 localhost 4242
からコンパイルされた ./run を使用:
#include <cstdio>
#include <cstdlib>
#include <time.h> /* time */
int main(int argc, char **argv)
{
if ( argc <= 2 ) {
fprintf(stderr, "2 param excepted: start point and number of sensors\n");
return 1;
}
unsigned long t = time(NULL);
srand(t);
int b; // index of first sensor
int n; // number of sensors
sscanf(argv[1], "%d", &b);
sscanf(argv[2], "%d", &n);
for ( int i = b; i < b+n; ++i ) {
printf("put democ.%d %d %lf host=localhost.localdomain\n", i, t, 1.0 + 0.01 * (rand() % 100));
}
return 0;
}
その後、localhost:4242 経由で democ.%d メトリクスを監視します。
パフォーマンスには満足していますが、ジェネレーターが多数のメトリック (n) を生成する場合に問題があります。
最初の問題は、いくつかのデータポイントの消失です。n に依存します。n = 10000 の場合、平均で 30 秒間に 29 ポイントあります。ただし、n = 75000 の場合、ポイントは 15 個しかありません。この問題は重大ではありません。ディスク帯域幅が原因だと思います。
しばらくすると、サーバーはエラーを送信します。
put: HBase error: 1000 RPCs waiting on "tsdb,\x00\x98[Q\x96E\xF0\x00\x00\x01\x00\x00\x01,1368809980414.dc6179de43f78eac6c8b745996200664." to come back online
2 番目の問題は、サーバーがしばらく稼働した後の HBase の障害です。OpenTSDB は、すべてのクライアントと独自のコンソールに大規模なフラッディングが発生し、次のようなメッセージが表示されて停止します。
put: HBase error: 10000 RPCs waiting on "-ROOT-,,0" to come back online
この問題を解決するにはどうすればよいですか?
プロジェクトに Cassandra を使用する可能性についても考えました。
時系列データを保存するための最良のオープンソース ソリューションです (各センサーは毎秒最大 40 バイトのデータを生成しますが、およそ 100,000 個のセンサーからのデータを 30 日間保存する必要があります)。