Hadoop/Cassandra - 如何存储和分析来自数千个传感器的数据?
Hadoop/Cassandra - how to store and analyse data from thousands of sensors?
我对“大数据”技术非常陌生,尤其是 Cassandra,所以我需要您的建议来完成我必须完成的任务。我一直在寻找有关处理时间序列的 Datastax 示例,以及此处关于此主题的不同讨论,但如果您认为我可能遗漏了什么,请随时告诉我。
这是我的问题。
我需要存储和分析来自我们正在测试的大约 100 个传感器站的数据。在每个传感器站中,我们都有数千个传感器。因此,对于每个站,我们 运行 进行了几次测试(大约 10 次,每次持续约 2 小时 30 秒),在此期间传感器每毫秒记录一次信息(可以是布尔值、整数或浮点数)。每次考试的记录在考试期间都保存在站台上,考试结束后发给我。即每次测试约10GB(每个参数约1MB的信息)。
以下是说明层次结构的架构:
Hierarchy description
现在,我可以访问一个带有 Spark 和 Cassandra 的小型 Hadoop 集群进行测试。我也许可以安装其他工具,但我真的很感激继续使用 Spark/Cassandra。
我的问题是:存储然后分析来自这些传感器的信息的最佳数据模型是什么?
“分析”是指:
查找特定站点上特定传感器记录的特定参数的最小值、最大值、平均值;或找到特定参数的那些值,但适用于所有站点;或找到特定参数的那些值,但当同一站的其他参数(一个或两个)高于限制时
绘制一个或多个参数的演变图,以便直观地比较它们(相同参数在不同站点,或不同参数在同一站点)
在参数或站点之间进行一些相关性分析(例如,查找传感器是否不工作)。
我正在考虑将所有信息放入具有以下数据模型的 Cassandra Table:
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)
);
但是,我不知道 table 是否能够处理所有数据:根据先前的数据模型(100 个站点 x 10 个测试 x 10 000 个参数 x 9,000,000 毫秒(2h30 毫秒)~= 10^14),即使每个分区“只有”9,000,000 行。
其他想法是将数据拆分为不同的 table(例如,每个站点一个 table,或者每个站点每个测试一个 table,等等)。不知道怎么选,欢迎大家指教!
非常感谢您的时间和帮助,如果您需要更多信息或细节,我很乐意告诉您更多。
皮尔
你走对了,Cassandra可以处理这样的数据。您可以将所需的所有数据存储在列族中,并使用 Apache Spark 而不是 Cassandra 来执行所需的聚合。
我觉得 Apache Spark 适合您的用例,因为它可用于聚合和计算相关性。
您还可以查看 Apache Hive,因为它可以 work/query 直接(通过外部表)处理 HDFS 中的数据。
检查这些:
我对“大数据”技术非常陌生,尤其是 Cassandra,所以我需要您的建议来完成我必须完成的任务。我一直在寻找有关处理时间序列的 Datastax 示例,以及此处关于此主题的不同讨论,但如果您认为我可能遗漏了什么,请随时告诉我。 这是我的问题。
我需要存储和分析来自我们正在测试的大约 100 个传感器站的数据。在每个传感器站中,我们都有数千个传感器。因此,对于每个站,我们 运行 进行了几次测试(大约 10 次,每次持续约 2 小时 30 秒),在此期间传感器每毫秒记录一次信息(可以是布尔值、整数或浮点数)。每次考试的记录在考试期间都保存在站台上,考试结束后发给我。即每次测试约10GB(每个参数约1MB的信息)。
以下是说明层次结构的架构: Hierarchy description
现在,我可以访问一个带有 Spark 和 Cassandra 的小型 Hadoop 集群进行测试。我也许可以安装其他工具,但我真的很感激继续使用 Spark/Cassandra。
我的问题是:存储然后分析来自这些传感器的信息的最佳数据模型是什么?
“分析”是指:
查找特定站点上特定传感器记录的特定参数的最小值、最大值、平均值;或找到特定参数的那些值,但适用于所有站点;或找到特定参数的那些值,但当同一站的其他参数(一个或两个)高于限制时
绘制一个或多个参数的演变图,以便直观地比较它们(相同参数在不同站点,或不同参数在同一站点)
在参数或站点之间进行一些相关性分析(例如,查找传感器是否不工作)。
我正在考虑将所有信息放入具有以下数据模型的 Cassandra Table:
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)
);
但是,我不知道 table 是否能够处理所有数据:根据先前的数据模型(100 个站点 x 10 个测试 x 10 000 个参数 x 9,000,000 毫秒(2h30 毫秒)~= 10^14),即使每个分区“只有”9,000,000 行。
其他想法是将数据拆分为不同的 table(例如,每个站点一个 table,或者每个站点每个测试一个 table,等等)。不知道怎么选,欢迎大家指教!
非常感谢您的时间和帮助,如果您需要更多信息或细节,我很乐意告诉您更多。
皮尔
你走对了,Cassandra可以处理这样的数据。您可以将所需的所有数据存储在列族中,并使用 Apache Spark 而不是 Cassandra 来执行所需的聚合。
我觉得 Apache Spark 适合您的用例,因为它可用于聚合和计算相关性。
您还可以查看 Apache Hive,因为它可以 work/query 直接(通过外部表)处理 HDFS 中的数据。
检查这些: