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

luc*_*001 20 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交谈,并且仍然需要一些应用程序来与作业服务器交谈
    • 就我所见,没有内置调度

我想了解一个简单但强大的部署策略的普遍共识 - 我还没有能够通过拖网来确定一个.

非常感谢!

js8*_*s84 7

即使你没有使用Mesos for Spark,你也可以看一下

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

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

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

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