我正在尝试使用独立/内部Spark群集(不是Yarn或Mesos)来设置Spark群集。我试图理解需要如何构建的东西。
以下是我的理解:
我的问题是:
我是否需要设置一个单独的服务器/节点来运行驱动程序,或者是否可以/应该从主服务器/其中一个工作节点运行?
如果我希望我的过滤器/收集代码定期运行,我是否需要在驱动程序中自行处理调度?
编辑:看起来提交作业的推荐方式是通过bash脚本?这似乎是一个手动过程。如何在生产中处理这个问题?
答案 0 :(得分:1)
您可以从非工作节点运行您的应用程序 - 它被称为客户端模式。如果在某个工作节点内运行应用程序,则称其为集群模式。两者都是可能的。
请看一下Spark Streaming,它似乎符合您的要求。您可以指定将收集每小时数据并开始计算。您还可以创建将执行spark-submit
。
是的,如果通过spark-submit
脚本,推荐的方法。但是,您可以从马拉松,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,您可以使用nohup
来spark-submit
。但是,如果必须在很短的时间间隔内执行它们,那么拥有一个长期运行的作业比使用多个小作业更好。然而,似乎Spark Streaming对你有好处,他们你有一个长期的工作。强制字数统计示例为here:)