Spark Streaming 加入 GreenPlum/Postgres 数据。方法
Posted
技术标签:
【中文标题】Spark Streaming 加入 GreenPlum/Postgres 数据。方法【英文标题】:Spark Streaming join with GreenPlum/Postgres Data. Approach 【发布时间】: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?用于生产? 对于此类问题是否有更好的解决方案/最佳实践? 问题。一些文献)【问题讨论】:
【参考方案1】:Spark 从 Apache geode 之类的缓存中读取数据的流式传输使这变得更好。在实时欺诈用例中使用了这种方法。简而言之,我有使用历史数据在 Greenplum 数据库上生成的特征。特征数据和一些决策查找数据被推送到 geode。要素会定期刷新(间隔 10 分钟),然后在 geode 中刷新。 Spark 评分流作业不断对交易进行评分,因为没有从 Greenplum 读取。火花流作业也将分数放入 geode,使用不同的线程同步到 Greenplum。我使用 k8 在 Cloud Foundry 上运行了 Spark Streaming。这是一个非常高的水平,但应该给你一个想法。
【讨论】:
谢谢!我将研究 Apache Geode【参考方案2】:您可能想查看 GPDB Spark 连接器 --
http://greenplum-spark-connector.readthedocs.io/en/latest/ https://greenplum-spark.docs.pivotal.io/130/index.html您可以将数据直接从分段加载到 Spark。 目前,如果你想写回GPDB,你需要使用标准的JDBC到master。
【讨论】:
以上是关于Spark Streaming 加入 GreenPlum/Postgres 数据。方法的主要内容,如果未能解决你的问题,请参考以下文章
Spark Streaming消费Kafka出现消费组rebalancing
走进大数据丨Spark Streaming VS Flink
Flink替代Spark Streaming怎么样?本篇给你答案