我能否在Apache Spark上运行时序数据库(TSDB)?

6
我正在学习大数据和Apache Spark,有一个疑问。
将来我需要从物联网收集数据,这些数据将以时间序列数据的形式传递给我。我正在阅读有关时间序列数据库(TSDB)的文章,发现了一些开源选项,例如Atlas、KairosDB、OpenTSDB等。
实际上,我需要使用Apache Spark,所以我想知道:我可以在Apache Spark上使用时间序列数据库吗?这有任何意义吗?请记住,我对大数据、Apache Spark以及本问题中涉及的所有内容都非常陌生。 如果我可以在Spark上运行TSDB,我该如何实现?

你应该能够查看 https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.sources.package 和一个实现,例如 https://github.com/databricks/spark-csv/blob/master/src/main/scala/com/databricks/spark/csv/CsvRelation.scala - 我没有找到任何 OpenTSDB Java API,所以你可能需要深入挖掘。 - Reactormonk
这是一个有趣的话题,但是你所说的“TSDB over Spark”是什么意思?在数据库中需要执行传感器数据处理的哪一部分,而在Spark中需要执行哪一部分呢? - Sergei Rodionov
1
我需要将所有的时间序列存储在一个好的数据库中,然后我将需要使用Spark对这些数据运用其机器学习算法。 - Paladini
@FernandoPaladini 没问题,Spark可以作为客户端吗?例如通过执行REST查询或通过JDBC执行SQL查询? - Sergei Rodionov
1
@SergeiRodionov 我认为真正的问题在于,如果您通过REST API或SQL查询加载数据,它将在驱动程序进程中加载。数据不会被分布式加载。 - Mahmoud Hanafy
1个回答

3
我是一个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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接