Spark 作为新一代计算平台的闪亮明星, 在我们的大数据平台中具有非常重要的作用, SQL 查询, 流计算和机器学习等场景都能见到它的身影, 可以说平台应用的数据处理, 计算和挖掘等场景都可以使用 Spark 进行开发. 在默认的情况下, 如果想向 Spark 提交计算任务, 通常会使用 Spark 提供的 Spark-Submit 脚本来提交含有业务逻辑的 jar 文件程序. 这种方式虽然简单, 但有悖于服务化的设计理念, 所以需要为 Spark 提供一套任务管理的 RESTful 服务.
在大数据平台中, Spark 是以 Spark on YARN 的方式运行的, 在这种模式下, 整个集群的资源调度是由 YARN 统一控制的, Spark 只是作为运行在 YARN 上的一个应用客户端而存在. 本文将介绍提交 Spark 任务至 YARN 运行的 3 种方式. 如下图所示:
Spark 任务提交方式
第一种方式: 使用 Spark-Submit 脚本提交
Spark 本身提供了 Spark-Submit 脚本用于提交任务, 可以借助 Java 的 Process-Builder 调用脚本, 将其包装成 RESTful 服务.
第二种方式: 使用 Spark Client 提交
除了 Spark-Submit 脚本之外, Spark 还提供了一套 Java 客户端接口用于提交任务. 在使用这套接口之后, 程序就可以去掉对 Spark-Submit 脚本的依赖, 这样一来提交任务的服务程序就可以运行在应用服务器之上, 使得以远程的方式向集群提交任务成为可能.
第三种方式: 使用 YARN RESTful API 提交
除了 Spark-Submit 和 Spark Client 两种方法之外, 还可以通过 YARN 提供的 RESTful API 向其提交 Spark 任务. 但是这种方法十分复杂, 并不推荐使用.
来源: http://www.jianshu.com/p/331a4bc793b3