【问题标题】:How to make Spark restart the job automatically after finishing?如何让 Spark 完成后自动重启作业?
【发布时间】:2016-07-05 10:22:11
【问题描述】:

我正在构建一个 lambda 架构,需要 Spark 作为它的批处理部分,以定期或在完成后立即重新启动,或者让 Spark Streaming 作业调用重新启动。我看过一些东西,我可能不了解 Spark 上下文,但不确定是否可以将 Spark 上下文放入循环中。任何人都可以提供任何快速指导吗?另一个快速的问题是,考虑到数据会不断添加到 HBase 中,Spark 将从那里读取数据,缓存有什么用处吗?提前感谢您的帮助。

编辑:如果我实现 SparkListener 并在作业结束时调用 collect,所有计算都会重做吗?

【问题讨论】:

    标签: java apache-spark lambda-architecture


    【解决方案1】:

    当您调用awaitTermination() 时,StreamingContext 不会退出并继续运行。您需要从另一个线程调用 stop() 以停止流式传输上下文。

     JavaDStream<T> jsonStrem = streamingContext.receiverStream(receiver);              
     streamingContext.start();
     streamingContext.awaitTermination();
    

    receiver 将按批处理间隔调用

    【讨论】:

    • 感谢您的意见。有趣的是,我实际上是在尝试让 Batch 执行此操作,就像在 SparkContext 中一样,而不是流式处理。我的 Spark Streaming 工作负责 lambda 架构的速度层,我有一个 Spark 工作来做批处理层。我希望这能让它更清楚。也许我在使用方面误解了 lambda 架构。
    【解决方案2】:

    似乎比我想象的要容易。我怀疑 while 循环不会在 RDD 函数之外工作,因为 Spark 会执行延迟执行。我错了。这个例子暗示这是可能的:https://github.com/apache/spark/blob/master/examples/src/main/java/org/apache/spark/examples/JavaPageRank.java

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      • 1970-01-01
      • 2016-09-22
      • 1970-01-01
      相关资源
      最近更新 更多