gpt4 book ai didi

java - Spark调度/架构困惑

转载 作者:行者123 更新时间:2023-11-30 07:08:16 27 4
gpt4 key购买 nike

我正在尝试使用独立/内部 Spark 集群(不是 Yarn 或 Mesos)来设置 Spark 集群。我正在尝试了解如何构建事物。

这是我的理解:

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

我的问题是:

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

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

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

最佳答案

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

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

  3. 是的,推荐的方式是通过 spark-submit 脚本。不过,您可以从 Marathon、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,您可以使用spark-submit调用nohup。然而,如果您必须在很短的时间间隔内执行这些作业,那么最好是拥有一项长时间运行的作业,而不是拥有许多小型作业。不过,Spark Streaming 似乎对您有好处,因为您将拥有一项长期运行的工作。强制字数示例为 here :)

关于java - Spark调度/架构困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39689070/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com