我可以在 Apache Spark 上运行时间序列数据库 (TSDB) 吗?

Posted

技术标签:

【中文标题】我可以在 Apache Spark 上运行时间序列数据库 (TSDB) 吗?【英文标题】:Can I run a Time Series Database (TSDB) over Apache Spark? 【发布时间】:2015-12-08 10:26:47 【问题描述】:

我开始学习大数据和Apache Spark,我有一个疑问。

将来我需要从物联网收集数据,这些数据将以time series data 的形式提供给我。我正在阅读有关时间序列数据库 (TSDB) 的文章,我发现了一些开源选项,例如 Atlas、KairosDB、OpenTSDB 等。

我实际上需要 Apache Spark,所以我想知道:我可以在 Apache Spark 上使用时序数据库吗?这有什么意义吗?请记住,我对大数据、Apache Spark 以及我在这个问题中谈到的所有问题的概念都很陌生。

如果我可以在 Spark 上运行 TSDB,我该如何实现?

【问题讨论】:

你应该可以,看看spark.apache.org/docs/latest/api/scala/… 和github.com/databricks/spark-csv/blob/master/src/main/scala/com/… 之类的实现——我还没有找到任何OpenTSDB Java API,所以你可能需要去挖掘。跨度> 这是一个有趣的话题,但是TSDB over Spark 是什么意思?传感器数据处理的哪一部分需要在数据库中执行,在 Spark 中执行哪一部分? 我需要将所有时间序列存储在一个好的数据库中,然后我需要 Spark 使用它的机器学习算法来处理这些数据。 @FernandoPaladini 应该没问题,Spark可以充当客户端,例如通过 JDBC 执行 REST 查询或 SQL 查询? @SergeiRodionov 我认为真正的问题是,如果您通过 REST API 或 SQL 查询加载数据,它将在驱动程序进程中加载​​。数据不会被分布式加载。 【参考方案1】:

我是一名 OpenTSDB 提交者,我知道这是一个老问题,但我想回答一下。我的建议是将您的传入数据写入 OpenTSDB,假设您只想存储原始数据并稍后处理它。然后使用 Spark,使用 OpenTSDB 类执行 OpenTSDB 查询。

你也可以用类来写数据,我想你想使用 IncomingDataPoint 构造,实际上我目前手头没有详细信息。如有更多问题,请随时通过 OpenTSDB 邮件列表与我联系。

您可以在此处查看 OpenTSDB 如何处理传入的“put”请求,您应该能够在您的代码中为写入执行相同的操作:

https://github.com/OpenTSDB/opentsdb/blob/master/src/tsd/PutDataPointRpc.java#L42

您可以在此处看到 Splicer 项目提交 OpenTSDB 查询,我认为您的 Spark 项目中可以使用类似的方法:

https://github.com/turn/splicer/blob/master/src/main/java/com/turn/splicer/tsdbutils/SplicerQueryRunner.java#L87

【讨论】:

以上是关于我可以在 Apache Spark 上运行时间序列数据库 (TSDB) 吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Apache Spark 上运行 RPC 服务器?

Apache Spark 与 MapReduce

在 Bluemix Apache-Spark 服务上运行的 Spark 应用程序中连接到 postgresql db

在 Apache Hadoop 上运行具有本地性质的 Spark 查询时出现数据局部性问题

尝试在 Windows 上运行 Apache Spark 示例时出错

Apache Spark 2.2.0 中文文档 - 集群模式概述 | ApacheCN