Apache Spark Standalone集群模式部署

1. 环境准备

为了部署Apache Spark Standalone集群模式,本次准备了三台Linux虚拟机来实现集群:一台Master和两台Slaves。
Master: 192.168.71.130
Slave: 192.168.71.131
Slave: 192.168.71.132
为了保证三台虚拟机之间能正常访问通讯,需要在每台虚拟机上配置/etc目录下的hosts和hostname文件。
所有的hosts文件设置如下:

1
2
3
hadoop0 192.168.71.130
hadoop1 192.168.71.131
hadoop2 192.168.71.132

各自对应IP的虚拟机上的hostname设置成上面相对应的IP地址前面的别名,例如IP为192.168.71.130的虚拟机的hostname设置成hadoop0。然后,通过ping命令测试各节点之间是否互通。
如果各节点之间有使用密钥验证登录,那么需要额外的生成密钥并添加到各节点认证文件中,以实现各节点的免密登录。
生成密钥:

1
ssh-keygen

一路默认回车,这样在当前用户的主目录下会生成.ssh文件夹。进入这个文件夹,首先把本机的公钥加入认证文件:

1
cat id_rsa.pub >> authorized_keys

2. 下载Spark

接下来,我们去Apache Spark官网下载相对应的Spark Pack。这里我们选择2.4.4 release版本并预编译包含Hadoop2.7的lib库的Spark。(Spark下载地址)

这里我们选择包含hadoop的lib库的Spark是为了免去配置Spark所需的hadoop依赖库的繁琐过程,具体的不带hadoop lib库的Spark的手动配置过程,会在Spark与Hadoop的整合应用这一章再展开。
然后点击下载链接,进入跳转页面后,任意选择一个下载链接。接着在预先准备的Linux虚拟机上下载Spark Package, 例如:

1
2
wget http://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.4.4/spark-2.4.4-bin-hadoop2.7.tgz
tar zxvf spark-2.4.4-bin-hadoop2.7.tgz

在/etc/profile中添加SPARK_HOME路径:

1
2
3
4
5
6
vi /etc/profile
export SPARK_HOME=/home/guty/software/spark-2.4.4-bin-hadoop2.7
export JAVA_HOME=/home/guty/software/jdk1.8.0_221
export PATH=.:$JAVA_HOME/bin:$SPARK_HOME/bin:$PATH

source /etc/profile

3. 配置Spark Master

在准备好Spark Package之后,我们上Master节点(192.168.71.130),进行相应的配置。
首先我们进入Spark目录spark-2.4.4-bin-hadoop2.7,然后配置spark环境变量,修改conf/spark-env.sh文件,在文件末尾添加JAVA_HOME路径(指定所使用的JDK)。

1
2
3
cp conf/spark-env.sh.template conf/spark-env.sh
vi conf/spark_env.sh
export JAVA_HOME=/home/guty/software/jdk1.8.0_221

接着配置slave机器的信息,修改conf/slaves文件,在文件末尾添加集群各台主机的hostname:

1
2
3
4
5
cp conf/slaves.template conf/slaves
vi conf/slaves
hadoop0
hadoop1
hadoop2

4. 配置Spark Workers (Slaves)

当Spark Master配置完成后,配置各个Spark Workers相对比较简单。这里使用linux的scp命令直接在各主机节点的局域网内床送复制SparK Pack程序文件。
例如在节点192.168.71.131和192.168.71.132上执行如下命令:

1
scp root@192.168.71.130:/home/guty/software/spark-2.4.4-bin-hadoop2.7  /home/guty/software

同样,在节点192.168.71.131和192.168.71.132上/etc/profile文件中添加SPARK_HOME路径。

5. 启动和停止Spark

  • 启动Spark
    启动后会显示如下信息:

    1
    2
    3
    4
    5
    6
    ./sbin/start-all.sh

    starting org.apache.spark.deploy.master.Master, logging to /home/guty/software/spark-2.4.4-bin-hadoop2.7/logs/spark-root-org.apache.spark.deploy.master.Master-1-hadoop0.out
    hadoop2: starting org.apache.spark.deploy.worker.Worker, logging to /home/guty/software/spark-2.4.4-bin-hadoop2.7/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-hadoop2.out
    hadoop1: starting org.apache.spark.deploy.worker.Worker, logging to /home/guty/software/spark-2.4.4-bin-hadoop2.7/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-hadoop1.out
    hadoop0: starting org.apache.spark.deploy.worker.Worker, logging to /home/guty/software/spark-2.4.4-bin-hadoop2.7/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-hadoop0.out

    然后可以访问Spark Web UI界面,http://192.168.71.130:8080是Spark Master节点web界面,下图可以看到各个workers节点的列表信息:

    单击上图其中某一个worker节点,可以查看该worker节点的任务执行情况,如下图:

  • 停止Spark
    停止Spark会显示如下信息:

    1
    2
    3
    4
    5
    6
    ./sbin/stop-all.sh 

    hadoop1: stopping org.apache.spark.deploy.worker.Worker
    hadoop0: stopping org.apache.spark.deploy.worker.Worker
    hadoop2: stopping org.apache.spark.deploy.worker.Worker
    stopping org.apache.spark.deploy.master.Master

References

  1. Spark Standalone Mode
  2. Spark的独立集群模式部署