您可以从非工作节点的应用程序 - 这就是所谓的客户端模式。如果您在某个工作节点中运行应用程序,则称为集群模式。他们都是可能的。
请看看Spark Streaming,看起来它会符合您的要求。您可以指定每收集一小时的数据并开始计算。您还可以创建将执行的cron任务。
是的,推荐的方式,如果通过脚本。然而,您可以从马拉松Oozie的cron作业运行此脚本。这取决于你想要做什么。
如果您想了解更多信息,请写更多关于你的使用情况,我会尽力评论后
更新与更精确的信息来更新我的回答:我建议在看Spark Streaming - 它有连接器Kafka,您可以通过foreachRDD编写聚合或自定义处理,以处理从特定主题收到的数据。 伪代码算法:
val ssc = new StreamingContext(sparkConf, Seconds(2))
val directKafkaStream = KafkaUtils.createDirectStream[
[key class], [value class], [key decoder class], [value decoder class] ](
streamingContext, [map of Kafka parameters], [set of topics to consume])
val topicFirst = directKafkaStream.filter (_._1 == "topic1")
val topic2 = directKafkaStream.filter (_._1 == "topic2")
topicFirst.foreachRDD (rdd => {
// do some processing with data collected from specified time window
});
关于cron的,你可以ivoke nohup
与。然而,如果你必须以很小的时间间隔执行它,那么最好有一个长时间运行的作业比很多小作业要好。但是,Spark Streaming似乎对你有好处,他们会有一个长时间运行的工作。必填字数示例为here :)
我需要监视几个kafka主题。每个主题都需要一个不同的工作来处理它。例如,主题a将由作业a处理,主题b由作业b处理,等等。所有作业需要共享相同的主/工作节点。 任何想法如何设计这个?谢谢。 –
如果一项工作是通过cron等运行的,那么它是否会运行一次并退出,或者是否需要保留在内存中,并在需要时重复它自己? –
@ClickUpvote我已经添加了一个更新 - 请看看Spark Streaming,看起来它会符合您的要求。您将有一个长时间运行的作业,将由Spark在指定的时间间隔触发 –