Spark作为新一代计算平台的闪亮明星,在我们的大数据平台中具有非常重要的作用,SQL查询、流计算和机器学习等场景都能见到它的身影,可以说平台应用的数据处理、计算和挖掘等场景都可以使用Spark进行开发。在默认的情况下,如果想向Spark提交计算任务,通常会使用Spark提供的Spark-Submit脚本来提交含有业务逻辑的jar文件程序。这种方式虽然简单,但有悖于服务化的设计理念,所以需要为Spark提供一套任务管理的RESTful服务。
在大数据平台中,Spark是以Spark on YARN的方式运行的,在这种模式下,整个集群的资源调度是由YARN统一控制的,Spark只是作为运行在YARN上的一个应用客户端而存在。本文将介绍提交Spark任务至YARN运行的3种方式。如下图所示:
- 第一种方式:使用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任务。但是这种方法十分复杂,并不推荐使用。