OpenTSDB/HBase在上载大量数据时失败

OpenTSDB/HBase在上载大量数据时失败,hbase,bigdata,opentsdb,Hbase,Bigdata,Opentsdb,我是大数据和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

我是大数据和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;
}
第二个问题是在服务器运行一段时间后,HBase出现故障。 OpenTSDB死时会大量涌入所有客户端和自己的控制台,并显示以下消息:

put: HBase error: 10000 RPCs waiting on "-ROOT-,,0" to come back online
我能做些什么来解决这个问题

我还考虑了在我的项目中使用卡桑德拉的可能性

存储时间序列数据的最佳开源解决方案是什么(大约,我需要存储10万个传感器的数据30天,而每个传感器每秒最多生成40字节的数据)。

关于
“RPC等待…”的错误是由HBase没有跟上这一事实造成的。OpenTSDB将在内存中保留数据点,并在一定限度内重试。但超过某一点后,它将开始丢弃数据并将此错误返回给您,以表明存在问题

就像任何数据库(分布式或非分布式)一样,您需要在HBase上进行基本调优。对于新手,通常有两个最常用的建议:

  • 确保“最大区域大小”足够大,这样您就不会经常分割
  • 预创建区域,以避免启动时失速(最近在上讨论了这一点)
  • 关于
    等待“-ROOT-,0”
    的最后一个问题不太可能出现。您提到了HBase故障:您是否确实看到HBase在测试过程中死亡?如果是,请检查它是否因为内存不足或GC暂停时间过长而导致失去ZooKeeper会话(这会迫使它故意自杀)而死亡。由于您提到在VMware映像中运行,我假设您处于用于测试的受限环境中,因此请确保为HBase(以及运行它的VM)提供足够的内存,以满足您写操作繁重的工作负载

    put: HBase error: 10000 RPCs waiting on "-ROOT-,,0" to come back online