【问题标题】:Spark Streaming join with GreenPlum/Postgres Data. ApproachSpark Streaming 加入 GreenPlum/Postgres 数据。方法
【发布时间】:2018-06-06 12:17:37
【问题描述】:

我有什么?

  • 我在 Hadoop 集群上有 Spark 流式处理应用程序(在 Kafka Streams 上),它每 5 分钟聚合一次用户在网站上的点击和一些操作,以及 将它们转换为指标。

  • 此外,我在 GreenPlum(在其自己的集群上)中有一个表,其中包含可能会更新的用户数据。该表使用通过 Kafka 的逻辑日志流复制填充。表大小为 1 亿用户。

我想要什么?

我想每隔 1 或 5 分钟将来自 GreenPlum 的静态数据加入 Spark Streams,然后聚合已经使用的数据,例如来自静态表的用户年龄。

备注

当然,我不需要从 users 表中读取所有记录。有相当稳定的核心段+每分钟注册的新用户数。 目前我使用 PySpark 2.1.0

我的解决方案

  1. 将数据从 GreenPlum 集群复制到 Hadoop 集群并保存为 兽人/镶木地板文件。每 5 分钟为新用户添加新文件。一旦 一天重新加载所有文件。

  2. 在 Hadoop 上创建新数据库并按原样通过 Kafka 设置日志复制 为 GreenPlum 完成。从 DB 读取数据并使用内置 Spark 流式连接。

  3. 从缓存中的 Spark 上的 GreenPlum 读取数据。加入流数据 缓存。

  4. 对于文件中每 5 分钟保存/追加新用户数据,忽略旧的 用户数据。存储额外的列,例如last_action 截断这个 如果用户在过去 2 周内未在网站上活动,则归档。因此, 将此文件加入流。

问题

  • 哪些解决方案更适合 MVP?用于生产?
  • 对于此类问题是否有更好的解决方案/最佳实践? 问题。一些文献)

【问题讨论】:

    标签: apache-spark hadoop pyspark spark-streaming greenplum


    【解决方案1】:

    Spark 从 Apache geode 之类的缓存中读取数据的流式传输使这变得更好。在实时欺诈用例中使用了这种方法。简而言之,我有使用历史数据在 Greenplum 数据库上生成的特征。特征数据和一些决策查找数据被推送到 geode。要素会定期刷新(间隔 10 分钟),然后在 geode 中刷新。 Spark 评分流作业不断对交易进行评分,因为没有从 Greenplum 读取。火花流作业也将分数放入 geode,使用不同的线程同步到 Greenplum。我使用 k8 在 Cloud Foundry 上运行了 Spark Streaming。这是一个非常高的水平,但应该给你一个想法。

    【讨论】:

    • 谢谢!我将研究 Apache Geode
    【解决方案2】:

    您可能想查看 GPDB Spark 连接器 --

    您可以将数据直接从分段加载到 Spark。 目前,如果你想写回GPDB,你需要使用标准的JDBC到master。

    【讨论】:

      猜你喜欢
      • 2016-02-28
      • 1970-01-01
      • 1970-01-01
      • 2018-08-13
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      • 2017-05-20
      • 1970-01-01
      相关资源
      最近更新 更多