例如,假设我希望分析几个月的公司数据的趋势。我计划使用 MLP 进行回归分析和分类。
一个月的数据有大约 100 亿个数据点(行)。数据有 30 个维度。12 个特征是数字的(整数或浮点数;连续)。其余的都是分类的(整数或字符串)。
目前,数据存储在平面文件 (CSV) 中,并分批处理和交付。数据分析在 R 中进行。
我想要:
- 将其更改为流处理(而不是批处理)。
- 将计算卸载到Spark 集群
- 将数据存放在时间序列数据库中,以方便读取/写入和查询。
另外,我希望集群在将数据加载到内存时能够从数据库中查询数据。
我有一个Apache Kafka系统,可以发布处理过的输入数据的提要。我可以编写一个 Go 模块将其连接到数据库中(通过 CURL 或 Go API,如果存在)。
已经有一个开发 Spark 集群可供使用(假设它可以根据需要进行扩展,如果需要的话)。
但我坚持选择数据库。有很多解决方案(这里是一个非详尽的列表),但我正在研究OpenTSDB、Druid和Axibase Time Series Database。
我简要介绍过的其他时间序列数据库似乎更像是针对处理度量数据进行了优化。(我看过 InfluxDB、RiakTS 和 Prometheus)
Spark 在 Hadoop、Mesos、独立或云中运行。它可以访问各种数据源,包括 HDFS、Cassandra、HBase 和 S3。- Apache Spark 网站
此外,时间序列数据库应该以直接向 Spark 公开的方式存储该数据(因为这是时间序列数据,它应该是不可变的,因此满足 RDD 的要求- 因此,它可以本地加载通过 Spark 进入集群)。
加载数据(或通过删除分类元素而降低维度的数据)后,使用 sparklyr(Spark 的 R 接口)和 Spark 的机器学习库(MLib,此备忘单提供功能的快速概述),回归和分类模型可以进行开发和试验。
所以,我的问题:
- 这似乎是处理大数据的合理方法吗?
- 我选择的数据库解决方案是否正确?(我准备使用列式存储和时间序列数据库,请不要推荐 SQL/关系 DBMS)
- 如果您以前从分析和系统的角度(就像我在做这两个)的角度对集群进行数据分析,您有什么建议/提示/技巧吗?
任何帮助将不胜感激。