我可以在 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) 吗?的主要内容,如果未能解决你的问题,请参考以下文章
在 Bluemix Apache-Spark 服务上运行的 Spark 应用程序中连接到 postgresql db
在 Apache Hadoop 上运行具有本地性质的 Spark 查询时出现数据局部性问题