火花调度/架构混乱

时间:2016-09-25 16:18:22

标签: java apache-spark

我正在尝试使用独立/内部Spark群集(不是Yarn或Mesos)来设置Spark群集。我试图理解需要如何构建的东西。

以下是我的理解:

  • 需要将一个节点设置为主
  • 需要将一个或多个节点设置为Workers
  • 我写的应用程序(用Java)将传递给Master的ip:port来创建spark上下文
  • 当我在java应用程序中运行任何代码时,在spark上下文中,例如filter / collect,该代码将自动在工作节点上运行。

我的问题是:

  • 我是否需要设置一个单独的服务器/节点来运行驱动程序,或者是否可以/应该从主服务器/其中一个工作节点运行?

  • 如果我希望我的过滤器/收集代码定期运行,我是否需要在驱动程序中自行处理调度?

  • 编辑:看起来提交作业的推荐方式是通过bash脚本?这似乎是一个手动过程。如何在生产中处理这个问题?

1 个答案:

答案 0 :(得分:1)

  1. 您可以从非工作节点运行您的应用程序 - 它被称为客户端模式。如果在某个工作节点内运行应用程序,则称其为集群模式。两者都是可能的。

  2. 请看一下Spark Streaming,它似乎符合您的要求。您可以指定将收集每小时数据并开始计算。您还可以创建将执行spark-submit

  3. 的cron任务
  4. 是的,如果通过spark-submit脚本,推荐的方法。但是,您可以从马拉松,Oozie的cron作业运行此脚本。这很大程度上取决于你想做什么。

  5. 如果您想了解更多信息,请详细了解您的使用案例,我会尝试使用更准确的信息更新我的答案

    评论后更新:我建议查看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,您可以使用nohupspark-submit。但是,如果必须在很短的时间间隔内执行它们,那么拥有一个长期运行的作业比使用多个小作业更好。然而,似乎Spark Streaming对你有好处,他们你有一个长期的工作。强制字数统计示例为here:)