Apache Spark 应用程序部署最佳实践

Apache Spark application deployment best practices

我有几个 Apache Spark 的用例 applications/scripts,通常采用以下形式:

一般 ETL 用例 - 更具体地说,将包含许多事件(想想事件源)的 Cassandra 列族转换为各种聚合列族。

流媒体用例 - 在事件到达系统时对其进行实时分析。

对于 (1),我需要定期启动 Spark 应用程序。

对于 (2),只需在启动时启动漫长的 运行ning Spark Streaming 进程,然后放手。

(注意——我使用 Spark Standalone 作为集群管理器,所以没有 yarn 或 mesos)

我正在尝试找出 Spark 应用程序的最常见/最佳实践部署策略。

到目前为止我能看到的选项是:

  1. 将我的程序部署为 jar,并 运行使用 spark-submit 执行各种任务——这似乎是推荐的方式火花文档。关于这个策略的一些想法:

    • 你如何 start/stop 任务 - 只使用简单的 bash 脚本?
    • 如何管理日程安排? - 只需使用 cron?
    • 有弹性吗? (例如,如果驱动程序服务器挂掉了,谁将作业安排到 运行?)
  2. 正在创建一个单独的 webapp 作为驱动程序。

    • 以编程方式创建一个 spark 上下文以与 spark 集群对话
    • 允许用户通过http接口启动任务
    • 使用 Quartz(例如)管理调度
    • 可以使用带有 zookeeper 选举的集群来实现弹性
  3. Spark 作业服务器 (https://github.com/ooyala/spark-jobserver)

    • 我认为 (2) 对我来说没有太多好处,因为我(还)没有很多团队和项目与 Spark 对话,并且仍然需要一些应用程序来与作业服务器对话
    • 据我所知,没有内置计划

我想了解普遍共识 w.r.t 一种简单但稳健的部署策略 - 到目前为止,我还无法通过拖网来确定一个。

非常感谢!

即使您没有使用 Mesos for Spark,您也可以看看

-Chronos 提供分布式容错 cron

-Marathon 用于长期 运行 应用程序的 Mesos 框架

请注意,这并不意味着您必须将 spark 部署移动到 mesos,例如你可以只使用 chronos 来触发 spark -submit.

希望我正确理解了您的问题,这对您有所帮助!