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

时间:2015-05-23 13:50:50

标签: apache-spark spark-streaming

我有几个Apache Spark应用程序/脚本的用例,通常采用以下形式:

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

流式使用案例 - 事件到达系统时的实时分析。

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

对于(2),只需在启动时启动长时间运行的Spark Streaming进程,然后继续运行。

(注意 - 我使用Spark Standalone作为集群管理器,因此没有纱线或介子)

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

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

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

    • 如何启动/停止任务 - 只使用简单的bash脚本?
    • 如何管理调度? - 只需使用cron?
    • 任何弹性? (例如,如果驱动程序服务器死了,谁会安排要运行的作业?)
  2. 创建单独的webapp 作为驱动程序。

    • 以编程方式创建一个spark上下文以与spark集群交谈
    • 允许用户通过http接口启动任务
    • 使用Quartz(例如)管理日程安排
    • 可以使用群集与zookeeper选举来恢复弹性
  3. Spark作业服务器https://github.com/ooyala/spark-jobserver

    • 我不认为(2)对我来说有很多好处,因为我还没有(但)有许多团队和项目与Spark交谈,并且仍然需要一些应用程序来无论如何谈谈工作服务器
    • 据我所见,没有内置任何计划
  4. 我想了解一个普遍的共识,那就是一个简单而强大的部署策略 - 到目前为止,我还无法通过网络搜索确定一个。

    非常感谢!

1 个答案:

答案 0 :(得分:7)

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

- Chronos 提供分布式和容错的cron

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

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

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