Spark集群有多种部署方式,比较常见的有Standalone模式和ON YARN模式

  • Standalone模式就是说部署一套独立的Spark集群,后期开发的Spark任务就在这个独立的Spark集群中执行
  • ON YARN模式是说使用现有的Hadoop集群,后期开发的Spark任务会在这个Hadoop集群中执行,此时这个Hadoop集群就是一个公共的了,不仅可以运行MapReduce任务,还可以运行Spark任务,这样集群的资源就可以共享了,并且也不需要再维护一套集群了,减少了运维成本和运维压力,一举两得。

所以在实际工作中都会使用Spark ON YARN模式
不过为了考虑到大家可能会有一些特殊场景确实要使用standalone模式部署独立的spark集群,所以在这,针对这两种部署模式我们都讲一下。
那在具体安装部署之前,需要先下载Spark的安装包。
进到spark的官网,点击download按钮
image.png
在这里可以选择Spark的版本和Hadoop的版本
image.png
但是这里面只有Spark的最新版本,一般不建议选择最新版本,可以在最新版本往下面回退一两个小版本
那我们想要下载其它版本的话就需要到archive里面下载了
image.png
目前spark有三大版本,1.x,2.x和3.x,其中3.x是一个预览版本,不能在生产环境中使用,所以目前使用最多的就是2.x的版本了
在这我们下载spark-2.4.3版本
image.png
在这需要注意选择合适的安装包
因为我们使用Spark的时候一般都是需要和Hadoop交互的,所以需要下载带有Hadoop依赖的安装包
这个时候就需要选择Hadoop版本对应的Spark安装包,我们的Hadoop是3.2的,里面Hadoop的版本只有2.6和2.7的,那就退而求其次选择hadoop2.7对应的这个Spark安装包,其实也是没什么问题的,如果有强迫症的话,就需要下载Spark的源码包,自己编译配套版本的安装包了。
其实在Spark3.0的那个预览版本里面是有和Hadoop3.2配套的版本的,不过那个不是稳定版本,不建议在生产环境下使用,所以就不考虑了。
image.png
所以最终我们就下载这个版本:spark-2.4.3-bin-hadoop2.7.tgz

Standalone

由于Spark集群也是支持主从的,在这我们使用三台机器,部署一套一主两从的集群
主节点:bigdata01
从节点:bigdata02,bigdata03

注意:需要确保这几台机器上的基础环境是OK的,防火墙、免密码登录、还有JDK 因为这几台机器我们之前已经使用过了,基础环境都是配置过的,所以说在这就直接使用了

先在bigdata01上进行配置
1、将spark-2.4.3-bin-hadoop2.7.tgz上传到bigdata01的/data/soft目录中
2、解压

  1. tar -zxvf spark-2.4.3-bin-hadoop2.7.tgz

3、重命名spark-env.sh.template

  1. cd spark-2.4.3-bin-hadoop2.7/conf/
  2. mv spark-env.sh.template spark-env.sh

4、修改spark-env.sh

  1. export JAVA_HOME=/data/soft/jdk1.8
  2. export SPARK_MASTER_HOST=bigdata1

5、重命名slaves.template

  1. mv slaves.template slaves

6、修改slaves(单机版不需要)
将文件末尾的localhost去掉,增加bigdata02和bigdata03这两个从节点的主机名

  1. bigdata02
  2. bigdata03

7、将修改好配置的spark安装包,拷贝到bigdata02和bigdata03上(单机版不需要)

  1. [root@bigdata01 soft]# scp -rq spark-2.4.3-bin-hadoop2.7 bigdata02:/data/soft/
  2. [root@bigdata01 soft]# scp -rq spark-2.4.3-bin-hadoop2.7 bigdata03:/data/soft/

8、启动Spark集群

  1. cd spark-2.4.3-bin-hadoop2.7
  2. sbin/start-all.sh

9、验证
在bigdata01上执行jps,能看到Master进程即可

  1. [root@bigdata01 spark-2.4.3-bin-hadoop2.7]# jps
  2. 1731 Master

在bigdata02和bigdata03上执行jps,能看到Worker进程即可

  1. [root@bigdata02 ~]# jps
  2. 1714 Worker
  3. [root@bigdata03 ~]# jps
  4. 1707 Worker

注意:我这里只用了一台部署Standalone,所有Master和Worker都能看到
image.png
还可以访问主节点的8080端口来查看集群信息
http://bigdata1:8080/
image.png
这就是Spark的独立集群

提交任务

那我们尝试向这个Spark独立集群提交一个spark任务
提交任务的命令该如何写呢?
来看一下Spark的官方文档
image.png
image.png
image.png
image.png
image.png
需要使用bin目录下的spark-submit脚本提交任务
master指定集群的地址
计算π值,计算2次

  1. cd /data/soft/spark-2.4.3-bin-hadoop2.7
  2. bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://bigdata1:7077 examples/jars/spark-examples_2.11-2.4.3.jar 2

提交之后可以到Spark的8080 web界面查看任务信息
image.png
停止spark

  1. cd /data/soft/spark-2.4.3-bin-hadoop2.7/sbin
  2. stop-all.sh

ON YARN(推荐)

ON YARN模式很简单,
先保证有一个Hadoop集群,然后只需要部署一个Spark的客户端节点即可,不需要启动任何进程

注意:Spark的客户端节点同时也需要是Hadoop的客户端节点,因为Spark需要依赖于Hadoop

我们的Hadoop集群是bigdata01、bigdata02、bigdata03
那我们可以选择把Spark部署在一个单独的节点上就可以了,其实就类似于我们之前部署Hadoop的客户端节点。
在这我们使用bigdata04来部署spark on yarn,因为这个节点同时也是Hadoop的客户端节点。
1、将spark-2.4.3-bin-hadoop2.7.tgz上传到bigdata04的/data/soft目录中
2、解压

  1. tar -zxvf spark-2.4.3-bin-hadoop2.7.tgz

3、重命名spark-env.sh.template

  1. cd spark-2.4.3-bin-hadoop2.7/conf/
  2. mv spark-env.sh.template spark-env.sh

4、修改spark-env.sh
在文件末尾增加这两行内容,指定JAVA_HOME和Hadoop的配置文件目录

  1. export JAVA_HOME=/data/soft/jdk1.8
  2. export HADOOP_CONF_DIR=/data/soft/hadoop-3.2.0/etc/hadoop

5、提交任务

  1. bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster examples/jars/spark-examples_2.11-2.4.3.jar 2

6、可以到Hadoop的8088界面查看提交上去的任务信息
image.png

此时就可以使用ON YARN模式来执行Spark任务了。