暂停/限制火花/火花流应用程序

时间:2015-03-14 16:53:10

标签: apache-spark spark-streaming

我编写了一个简单的火花流应用程序,它基本上从Kafka读取事件流,并将这些事件存储在Cassandra中,允许对这些数据进行有效查询。这项工作的主要目的是处理当前的实时数据。但是也有存储在hdfs中的历史事件。

我想在历史工作中重用代码处理RDD(流工作的一部分),我想知道根据以下要求阅读历史数据的最佳解决方案是什么:

  1. 历史事件存储在hdfs中的每日汇总文件中(我想在一系列历史文件上运行作业)
  2. 有可能暂停工作会很好(插入cassandra是幂等的,所以我需要至少一次处理)
  3. 我希望有一些限制机制,允许定义可以处理的最大事件数(在一段时间内:例如每1分钟)
  4. 到目前为止,我已经考虑了两种方法:

    • Batch Spark作业
      • Ad1:有没有比基于文件范围定义RDD更好的方法,而不是为每个文件创建一个RDD,然后将它们联合起来?
      • Ad2,3:有可能吗?
    • Spark Streaming工作
      • Ad1:如何有效地定义一系列输入文件?比使用ssc.textFileStream(inputDir)并将我想要处理的文件复制到此目录更好吗?
      • Ad2:我认为设置检查点目录就是我要找的。
      • Ad3我打算使用spark.streaming.receiver.maxRate属性

    我是否正确,常规批量火花不能满足我的要求?我正在等待有关火花流解决方案的建议。

1 个答案:

答案 0 :(得分:2)

对于Batch Spark作业, 1.您可以在sc。***文件操作中给出逗号分隔的文件名 2,3。因为你将能够

对于流媒体工作, 1.您可以为文件定义RDD并使用queueStream插入它们。 2.取决于你暂停的意思。您可以在想要暂停时优雅地停止流式上下文。 是的,就是这样。

但是退一步,你可以在RDD和DStream转换中做很多代码共享。无论您对批处理部件中的RDD做什么,都可以在流部分的DStream.transform()中重复使用。