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 应用程序的最常见/最佳实践部署策略。
到目前为止我能看到的选项是:
将我的程序部署为 jar,并 运行使用 spark-submit 执行各种任务——这似乎是推荐的方式火花文档。关于这个策略的一些想法:
- 你如何 start/stop 任务 - 只使用简单的 bash 脚本?
- 如何管理日程安排? - 只需使用 cron?
- 有弹性吗? (例如,如果驱动程序服务器挂掉了,谁将作业安排到 运行?)
正在创建一个单独的 webapp 作为驱动程序。
- 以编程方式创建一个 spark 上下文以与 spark 集群对话
- 允许用户通过http接口启动任务
- 使用 Quartz(例如)管理调度
- 可以使用带有 zookeeper 选举的集群来实现弹性
Spark 作业服务器 (https://github.com/ooyala/spark-jobserver)
- 我认为 (2) 对我来说没有太多好处,因为我(还)没有很多团队和项目与 Spark 对话,并且仍然需要一些应用程序来与作业服务器对话
- 据我所知,没有内置计划
我想了解普遍共识 w.r.t 一种简单但稳健的部署策略 - 到目前为止,我还无法通过拖网来确定一个。
非常感谢!
我有几个 Apache Spark 的用例 applications/scripts,通常采用以下形式:
一般 ETL 用例 - 更具体地说,将包含许多事件(想想事件源)的 Cassandra 列族转换为各种聚合列族。
流媒体用例 - 在事件到达系统时对其进行实时分析。
对于 (1),我需要定期启动 Spark 应用程序。
对于 (2),只需在启动时启动漫长的 运行ning Spark Streaming 进程,然后放手。
(注意——我使用 Spark Standalone 作为集群管理器,所以没有 yarn 或 mesos)
我正在尝试找出 Spark 应用程序的最常见/最佳实践部署策略。
到目前为止我能看到的选项是:
将我的程序部署为 jar,并 运行使用 spark-submit 执行各种任务——这似乎是推荐的方式火花文档。关于这个策略的一些想法:
- 你如何 start/stop 任务 - 只使用简单的 bash 脚本?
- 如何管理日程安排? - 只需使用 cron?
- 有弹性吗? (例如,如果驱动程序服务器挂掉了,谁将作业安排到 运行?)
正在创建一个单独的 webapp 作为驱动程序。
- 以编程方式创建一个 spark 上下文以与 spark 集群对话
- 允许用户通过http接口启动任务
- 使用 Quartz(例如)管理调度
- 可以使用带有 zookeeper 选举的集群来实现弹性
Spark 作业服务器 (https://github.com/ooyala/spark-jobserver)
- 我认为 (2) 对我来说没有太多好处,因为我(还)没有很多团队和项目与 Spark 对话,并且仍然需要一些应用程序来与作业服务器对话
- 据我所知,没有内置计划
我想了解普遍共识 w.r.t 一种简单但稳健的部署策略 - 到目前为止,我还无法通过拖网来确定一个。
非常感谢!