Apache spark Spark Streaming HDFS使用现有数据启动作业

Apache spark Spark Streaming HDFS使用现有数据启动作业,apache-spark,hdfs,spark-streaming,Apache Spark,Hdfs,Spark Streaming,我使用以下方法从HDFS路径构建数据流: val myDstream=ssc.textFileStream(inputPath) 正如预期的那样,当应用程序运行时,数据流读取写入(移动)到HDFS路径中的每个新文件。但是,它不会处理应用程序启动时准备就绪的文件 修改代码后重新启动应用程序时,我希望重新读取路径中已经存在的旧文件。我还希望它读取在应用程序重新启动时上载的新文件(这可能需要约30秒的停机时间) 在启动时,我会处理整个路径,然后继续流式处理新文件 有什么方法可以做到这一点吗?如果您试

我使用以下方法从HDFS路径构建数据流:

val myDstream=ssc.textFileStream(inputPath)
正如预期的那样,当应用程序运行时,数据流读取写入(移动)到HDFS路径中的每个新文件。但是,它不会处理应用程序启动时准备就绪的文件

修改代码后重新启动应用程序时,我希望重新读取路径中已经存在的旧文件。我还希望它读取在应用程序重新启动时上载的新文件(这可能需要约30秒的停机时间)

在启动时,我会处理整个路径,然后继续流式处理新文件


有什么方法可以做到这一点吗?

如果您试图解决的业务问题是事件处理,那么像卡夫卡这样的东西可能更适合对事件进行排队。Spark Streaming可以是队列的订阅者,而另一个订阅者可以同时将事件存储到HDFS中以供以后的批处理。我最终将使用Kafka,我现在使用HDFS,因为它是allready设置。然而,即使使用kafka源代码,问题仍然存在:我想更新处理器代码(假设它有bug),现在我想在读取新事件之前先重新处理旧数据。在处理较新的事件之前,如何将该数据加载到数据流中?这里有设计模式吗?显然,您可以通过给它一个偏移量来告诉Kafka从队列的开头开始:据我所知,Kafka在消息被消费后不会无限地持久化消息。因此,错误代码读取的消息可能会永远丢失。在这种情况下,我会尝试使用core Spark重新使用Spark流代码中的相关逻辑,直接对HDFS中存档的消息进行批处理。如果您试图解决的业务问题是事件处理,也许像卡夫卡这样的地方更适合排队等候事件。Spark Streaming可以是队列的订阅者,而另一个订阅者可以同时将事件存储到HDFS中以供以后的批处理。我最终将使用Kafka,我现在使用HDFS,因为它是allready设置。然而,即使使用kafka源代码,问题仍然存在:我想更新处理器代码(假设它有bug),现在我想在读取新事件之前先重新处理旧数据。在处理较新的事件之前,如何将该数据加载到数据流中?这里有设计模式吗?显然,您可以通过给它一个偏移量来告诉Kafka从队列的开头开始:据我所知,Kafka在消息被消费后不会无限地持久化消息。因此,错误代码读取的消息可能会永远丢失。在这种情况下,我会尝试使用core Spark,并在Spark流代码中重新使用相关逻辑,直接对HDFS中存档的消息进行批处理。