Hadoop/Cassandra - 如何存储和分析数千个传感器的数据?

问题描述:

我对«大数据»技术很陌生,特别是Cassandra,所以我需要您的建议来完成我所要做的任务。我一直在寻找关于处理时间序列的Datastax示例,以及关于此主题的不同讨论,但如果您认为我可能错过了某些内容,请随时告诉我。 这是我的问题。Hadoop/Cassandra - 如何存储和分析数千个传感器的数据?

我需要存储和分析来自我们正在测试的约100个传感器站的数据。在每个传感器站,我们有几千个传感器。因此,对于每个站,我们运行多个测试(约10个,每个测试持续约2小时30分钟),在此期间传感器每毫秒记录信息(可以是布尔值,整数或浮点数)。每次测试的记录都会在测试过程中保留在测试站上,然后一旦测试完成,它们就会发送给我。这意味着每个测试大约10 GB(每个参数大约1 MB的信息)。

这里是为了说明层级架构: Hierarchy description

现在,我有机会获得小的运行Hadoop集群与Spark和卡桑德拉进行测试。我可能能够安装其他工具,但我非常感谢继续与Spark/Cassandra合作。

我的问题是:什么可能是最好的数据模型存储然后分析来自这些传感器的信息?

通过“分析”,我的意思是:

  • 找到最小值,最大值,在由一个特定的站上的特定传感器所记录的特定参数平均值;或者为一个特定的参数找出那些值,但是对于所有的电台;或找到某个特定参数的那些值,但是当同一个站的其他参数(一个或两个)高于一个极限时

  • 绘制一个或多个参数的演变,以视觉比较它们(不同站上的相同参数,或同一工作站上的不同参数)

  • 在参数或站点之间做一些相关分析(例如,以发现传感器是否不工作)。

我的想法把所有的信息在卡桑德拉表具有以下数据模型:

CREATE TABLE data_stations (
station text,   // station ID 
test int,    // test ID 
parameter text,   // name of recorded parameter/sensor 
tps timestamp,   // timestamp 
val float,    // measured value 
PRIMARY KEY ((station, test, parameter), tps) 
); 

不过,我不知道,如果一个表将能够处理所有数据:根据先前的数据模型(100个站×10测试×10 000个参数×9,000,000ms(2h30,以毫秒计)〜= 10^14),快速计算给出10^14个不同的行,即使每个分区“仅”行。其他想法是将数据分成不同的表格(例如,每个工作站一个表格,或每个工作站每个测试一个表格等)。我不知道如何选择,因此欢迎任何建议!

非常感谢您的时间和帮助,如果您需要更多信息或详细信息,我很乐意告诉您更多信息。

Piar

您正处在正确的轨道上,Cassandra可以处理这些数据。您可以将所需的所有数据存储在列系列中,并使用Apache Spark超过Cassandra来执行所需的聚合。

我觉得Apache Spark适合您的用例,因为它可以用于聚合和计算相关性。

您可能还会检出Apache Hive,因为它可以直接(通过外部表)在HDFS中对数据进行工作/查询。

检查这些:

Cassandra - Max. size of wide rows?

Limitations of Cassandra

+0

感谢您的快速答复。我很高兴听到Spark和Cassandra是我的问题的不错选择! 我检查了您发送的链接,确实很有趣。但是,“每个分区20亿个单元”的限制是否意味着只要我的分区少于20亿个单元,我就可以在同一个表中放入尽可能多的数据,而不受任何限制?在这种情况下,我可以使用我在第一封邮件中提供的第一个数据模型,是否也是你的感受? 再次感谢您的回答! – Piar

+0

是的,您可以将所有数据放入不同的分区(每个分区不超过20亿个单元格)放入表格/列族中。 __但请记住所有[Cassandra的限制](http://wiki.apache.org/cassandra/Cas​​sandraLimitations)__ –

+0

好的,谢谢精度和链接。这真的很有用,我会尝试一下! – Piar