Spark2.x集群安装文章网上已经有很多,这里整合了多篇文章安装步骤,并详细讲解了Master、Worker的启动命令、spark-env.sh文件的详细配置等,由于Spark2.x集群安装需要用的JDK、Scala等组建的支撑,由于安装比较简单,我这里不在讲解,只简单列一下我这里用到的软件版本:


版本信息:


  1. 操作系统 :CentOS Linux release 7.2.1511 (Core)

  2. JDK:    java version "1.8.0_112"

  3. scala:Scala code runner version 2.12.8


Spark2.2.1安装包下载:


    官网Spark各个版本下载地址:
        https://archive.apache.org/dist/spark/

    我这里下载的是:

    https://archive.apache.org/dist/spark/spark-2.2.1/spark-2.2.1-bin-hadoop2.7.tgz


集群节点信息


192.168.1.158salver158.hadoop.ljsmaster节点
192.168.1.31 salver31.hadoop.ljsworker1节点
192.168.1.32salver32.hadoop.ljsworker2节点


安装步骤:


1.首先关闭防火墙,并置为开机自动关闭(三个节点都做)

#关闭防火墙systemctl stop firewalld.service #永久关闭systemctl disable firewalld.service

2.在文件/etc/hosts中配置主机名(三个节点都做)

192.168.1.158  salver158.hadoop.ljs  salver158192.168.1.31   salver31.hadoop.ljs   salver31192.168.1.32   salver32.hadoop.ljs   salver31

3.创建用户和用户组spark:spark,指定home路径:/home/spark,并设置密码(三个节点都做):

[root@salver158 ~]# groupadd spark [root@salver158 ~]# useradd -d /home/spark -g spark -m spark[root@salver158 ~]#passwd  spark

4.SSH免密码登录,从Master到两个Worker节点,具体操作可参照我之前的一篇文章“ssh免密码登录步骤”:

链接地址:

      https://mp.weixin.qq.com/s/1lGchNclXUObImor5Lw_lA

5.安装JDK、Scala,这里请自行百度;

6.切换到spark用户,上传并解压spark2.2.1安装包(暂时只在master节点执行):

[spark@salver158 ~]#tar -zxvf spark-2.2.1-bin-hadoop2.7.tgz -C /home/spark/[spark@salver158 ~]#mv  spark-2.2.1-bin-hadoop2.7 spark2.2.1

7.spark配置(只在master节点执行):

[spark@salver158 ~]#cd /home/spark/spark2.2.1/conf[spark@salver158 ~]#mv spark-env.sh.template spark-env.sh[spark@salver158 ~]#mv slaves.template slaves

   1). 配置slaves文件,在conf/salves文件中,哪些机器是作为worker节点的,可以配置你要在哪些机器上启动worker进程,这里添加两个worker: 

salver31.hadoop.ljssalver32.hadoop.ljs

    2).配置spark-env.sh,它是spark的核心配置文件,这里详细说明:

#jdk配置export JAVA_HOME=/usr/jdk64/jdk1.8.0_112export JRE_HOME=${JAVA_HOME}/jre
#master port也可以在单独启动master和worker进程的命令行参数指定#sbin/start-master.sh --port 7078,一般建议配置到spark-env.sh中
export SPARK_MASTER_IP=salver158.hadoop.unicomexport SPARK_MASTER_PORT=7077
#指定master web ui的端口号(可选,默认是8080export SPARK_MASTER_WEBUI_PORT=8080#指定cpu、内存export SPARK_EXECUTOR_MEMORY=1024M export SPARK_WORKER_CORES=2export SPARK_WORKER_MEMORY=2048Mexport SPARK_CONF_DIR=/home/spark/spark2.2.1/conf


8.配置完成后,将配置好的Spark安装文件夹 拷贝到另外两个节点上:

    

[spark@salver158 ~]scp -r /home/spark/spark2.2.1  spark@salver31:~/[spark@salver158 ~]scp -r /home/spark/spark2.2.1  spark@salver31:~/

9.为了方便使用,可在.bash_profile文件中配置下环境变量:

export SPARK_HOME=/home/spark/spark2.2.1export PATH=${SPARK_HOME}/bin:$PATH

10.集群启动,这里简单列下spark常用的启动脚本:

sbin/start-all.sh        根据配置,在集群中各个节点上,启动一个master进程和多个worker进程sbin/stop-all.sh         在集群中停止所有master和worker进程sbin/start-master.sh      在本地启动一个master进程sbin/stop-master.sh        关闭master进程sbin/start-slaves.sh      根据conf/slaves文件中配置的worker节点,启动所有的worker进程sbin/stop-slaves.sh        关闭所有worker进程sbin/start-slave.sh        在本地启动一个worker进程


其他知识点补充说明:


1.启动脚本补充:

    以下参数是可以在手动启动master和worker的时候指定的

-h HOST, --host HOST

    在哪台机器上启动,默认就是本机,这个很少配

-p PORT, --port PORT

    在机器上启动后,使用哪个端口对外提供服务,master默认是7077,worker默认是随机的,也很少配

--webui-port PORT

    web ui的端口,master默认是8080,worker默认是8081,也很少配

-c CORES, --cores CORES

    仅限于worker,总共能让spark作业使用多少个cpu core,默认是当前机器上所有的cpu core

-m MEM, --memory MEM

    仅限于worker,总共能让spark作业使用多少内存,是100M或者1G这样的格式,默认是1g

-d DIR, --work-dir 

    DIR 仅限于worker,工作目录,默认是SPARK_HOME/work目录

--properties-file FILE

     master和worker加载默认配置文件的地址,默认是conf/spark-defaults.conf,很少配


举个例子:集群中某一个worker节点的内存可能比较少,其他节点内存比较大,可单独启动这个worker指定相应的内存:

sh sbin/start-slave.sh  spark://salver158.hadoop.ljs:7077  -m 512m


2.spark-env.sh其他配置详解:

a.SPARK_MASTER_OPTS:

    设置master的额外参数,使用"-Dx=y"设置各个参数,常设置以下几个参数:

#参数名                      默认值            含义#spark.deploy.retainedApplications        200              在spark web ui上最多显示多少个application的信息#spark.deploy.retainedDrivers          200              在spark web ui上最多显示多少个driver的信息#spark.deploy.spreadOut              true            资源调度策略,spreadOut会尽量将application的executor进程分布在更多worker上,适合基于hdfs文件计算的情况,提升数据本地化概率;非spreadOut会尽量将executor分配到一个worker上,适合计算密集型的作业#spark.deploy.defaultCores            无限大            每个spark作业最多在standalone集群中使用多少个cpu core,默认是无限大,有多少用多少#spark.deploy.timeout              60              单位秒,一个worker多少时间没有响应之后,master认为worker挂掉了

比如这里设置: 

export SPARK_MASTER_OPTS="-Dspark.deploy.timeout=60  -Dspark.deploy.retainedApplications=200"


b.SPARK_LOCAL_DIRS :

    spark的工作目录,包括了shuffle map输出文件,以及持久化到磁盘的RDD等

c.SPARK_WORKER_PORT:

    worker节点的端口号,默认是随机的,一般不需要设置

d.SPARK_WORKER_WEBUI_PORT:

    worker节点的web ui端口号,默认是8081,一般不需要设置

e.SPARK_WORKER_CORES:

    worker节点上,允许spark作业使用的最大cpu数量,默认是机器上所有的cpu core

f.SPARK_WORKER_MEMORY:

    worker节点上,允许spark作业使用的最大内存量,格式为1000m,2g等,默认最小是1g内存

g.SPARK_WORKER_INSTANCES:

    当前机器上的worker进程数量,默认是1,可以设置成多个,但是这时一定要设置SPARK_WORKER_CORES,限制每个worker的cpu数量

h.SPARK_WORKER_DIR:

    spark作业的工作目录,包括了作业的日志等,默认是${SPARK_HOME}/work


i.SPARK_WORKER_OPTS

    worker的额外参数,使用"-Dx=y"设置各个参数,常设置以下几个参数:

参数名                           默认值            含义spark.worker.cleanup.enabled     false            是否启动自动清理worker工作目录,默认是falsespark.worker.cleanup.interval    1800             单位秒,自动清理的时间间隔,默认是30分钟spark.worker.cleanup.appDataTtl  7 * 24 * 3600    默认将一个spark作业的文件在worker工作目录保留多少时间,默认是7天

比如这里设置: 

export SPARK_WORKER_OPTS="-Dspark.worker.cleanup.enabled=false"

j.SPARK_DAEMON_MEMORY:

    分配给master和worker进程自己本身的内存,默认是1g

k.SPARK_DAEMON_JAVA_OPTS:

    设置master和worker自己的jvm参数,使用"-Dx=y"设置各个参数

l.SPARK_PUBLISC_DNS:

    master和worker的公共dns域名,默认是没有的,一般不设置