【发布时间】:2018-06-06 12:17:37
【问题描述】:
我有什么?
我在 Hadoop 集群上有 Spark 流式处理应用程序(在 Kafka Streams 上),它每 5 分钟聚合一次用户在网站上的点击和一些操作,以及 将它们转换为指标。
此外,我在 GreenPlum(在其自己的集群上)中有一个表,其中包含可能会更新的用户数据。该表使用通过 Kafka 的逻辑日志流复制填充。表大小为 1 亿用户。
我想要什么?
我想每隔 1 或 5 分钟将来自 GreenPlum 的静态数据加入 Spark Streams,然后聚合已经使用的数据,例如来自静态表的用户年龄。
备注
当然,我不需要从 users 表中读取所有记录。有相当稳定的核心段+每分钟注册的新用户数。 目前我使用 PySpark 2.1.0
我的解决方案
将数据从 GreenPlum 集群复制到 Hadoop 集群并保存为 兽人/镶木地板文件。每 5 分钟为新用户添加新文件。一旦 一天重新加载所有文件。
在 Hadoop 上创建新数据库并按原样通过 Kafka 设置日志复制 为 GreenPlum 完成。从 DB 读取数据并使用内置 Spark 流式连接。
从缓存中的 Spark 上的 GreenPlum 读取数据。加入流数据 缓存。
- 对于文件中每 5 分钟保存/追加新用户数据,忽略旧的
用户数据。存储额外的列,例如
last_action截断这个 如果用户在过去 2 周内未在网站上活动,则归档。因此, 将此文件加入流。
问题
- 哪些解决方案更适合 MVP?用于生产?
- 对于此类问题是否有更好的解决方案/最佳实践? 问题。一些文献)
【问题讨论】:
标签: apache-spark hadoop pyspark spark-streaming greenplum