java - Spark调度/架构困惑

标签 java apache-spark

我正在尝试使用独立/内部 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/

相关文章:

apache-spark - pyspark 如何加载压缩的 snappy 文件

scala - 何时使用 "sbt assembly"和 "sbt compile && sbt package"?

JAVA 电子邮件消息 - 剪辑引用行

scala - 警告 :Multiple versions of scala libraries detected?

hadoop - 如何从命令行运行 Spark-java 程序

Java:BufferedImage 到字节数组并返回

python - 使用 Pyspark 并行化 HTTP 请求

java - 从 Java 运行 Ant 时设置 JAVA_HOME

java - 为什么在 instanceof 运算符上编译时会出现错误,但在强制转换时却可以正常工作

java - 当有人未​​能输入正确的密码时,如何使对话框显示?