【问题标题】:Spark streaming with Checkpoint使用 Checkpoint 进行 Spark 流式传输
【发布时间】:2015-01-20 10:05:22
【问题描述】:

我是引发流媒体的初学者。所以对检查点有一个基本的怀疑。我的用例是按天计算唯一用户数。我为此使用按键和窗口减少。我的窗口持续时间是 24 小时,幻灯片持续时间是 5 分钟。我正在将处理后的记录更新到 mongodb。目前我每次都替换现有记录。但我看到内存随着时间的推移慢慢增加,并在 1 和 1/2 小时后终止进程(在 aws 小实例中)。重启后的 DB 写入会清除所有旧数据。所以我知道检查点是解决这个问题的方法。但我的怀疑是

  • 我的检查点持续时间应该是多少..?根据文档,它说幻灯片持续时间为 5-10 倍。但我需要一整天的数据。所以保持24小时是可以的。
  • 理想的检查点应该在哪里......?最初是在我收到流时,或者就在窗口操作之前或数据缩减发生之后。

  • 感谢您的帮助。
    谢谢

    【问题讨论】:

      标签: apache-spark spark-streaming


      【解决方案1】:

      在流式传输场景中,拥有 24 小时的数据通常太多了。为了解决这个问题,您可以使用概率方法而不是精确度量来进行流式传输,并执行稍后的批处理计算以获得准确的数字(如果需要)。

      在您的情况下,要获得不同的计数,您可以使用一种称为HyperLogLog 的算法。您可以从 spark streaming here 看到使用 Twitter 的 HyperLogLog 实现的示例(一个名为 AlgeBird 的库的一部分)

      【讨论】:

      • 感谢您的回复。因此,尝试使用流式处理解决整个链将不是一种正确的方法。?如果我将作业与火花流和另一个定期运行的火花作业分开会更好吗?关于不同的计数。因为我们需要每天获取唯一用户。我们使用窗口收集用户,然后使用 countApproxDistinctByKey,据我了解,它在内部使用 HyperLogLog。
      • 如果您查看代码示例,您会发现它计算了每个批次的估计值(即您计算的较小窗口)和一个全局值(在您的情况下是一整天) ) .这不像保存所有数据以便可以汇总
      猜你喜欢
      • 2017-05-26
      • 1970-01-01
      • 2017-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-22
      • 2020-08-11
      • 1970-01-01
      相关资源
      最近更新 更多