Spark的部署模式有Local、Local-Cluster、Standalone、Yarn、Mesos,我们选择最具代表性的Standalone集群部署模式。
1、集群角色
从物理部署层面上来看,Spark主要分为两种类型的节点,Master节点和Worker节点,Master节点主要运行集群管理器的中心化部分,所承载的作用是分配Application到Worker节点,维护Worker节点、Driver、Application的状态。Worker节点负责具体的业务运行。
从Spark程序运行的层面来看,Spark主要分为驱动器节点和执行器节点。
2、集群规划
node1 | node2 | node3 |
---|---|---|
master | worker | worker |
3、虚拟机准备
1)准备3台虚拟机
2)配置ip地址
3)配置主机名称
4)配置主机名映射hosts
5)禁用selinux
6)关闭防火墙
CentOS7基本环境设置
https://www.jianshu.com/p/76a415f9fb0f
CentOS6基本环境设置
https://www.jianshu.com/p/f93598c66ca9
7)安装jdk1.8
https://www.jianshu.com/p/b37c70d61e2a
8)安装 zookeeper
https://www.jianshu.com/p/e04167aef33a
9)安装 Hadoop
https://www.jianshu.com/p/2d8518b19ee5
4、Scala jar 包下载
https://www.jianshu.com/p/6caad98f2fce
5、Spark jar 包下载
https://www.jianshu.com/writer#/notebooks/29194484/notes/33679124
6、Scala 安装
https://www.jianshu.com/p/e064987e5a0a
尖叫提示: /etc/profile.d/custom.sh 同样需要配置
7、Spark安装
解压安装包
[victor@node1 software]$ tar -xzvf spark-2.1.1-bin-hadoop2.7.tgz -C /opt/module
[victor@node1 software]$ cd /opt/module
[victor@node1 module]$ ln -s spark-2.1.1-bin-hadoop2.7 spark
配置环境变量(最好不配置)
[victor@node1 module]$ sudo vim /etc/profile
#spark path
export SPARK_HOME=/opt/module/spark
export PATH=${SPARK_HOME}/bin:${SPARK_HOME}/sbin:$PATH
8、以复制的方式,创建slaves、spark-env.sh、文件
[victor@node1 ~]$ cd /opt/module/spark/conf/
[victor@node1 conf]$ pwd
/opt/module/spark/conf
[victor@node1 conf]$ cp slaves.template slaves
[victor@node1 conf]$ cp spark-env.sh.template spark-env.sh
9、编辑slave文件,将work的hostname写入
[victor@node1 conf]$ vim slaves
node2
node3
10、编辑spark-env.sh,配置master
[victor@node1 conf]$ vim spark-env.sh
SPARK_MASTER_HOST=node1
SPARK_MASTER_PORT=7077
#本机IP地址(也可以配置主机名映射hadoop102)每个节点分别修改
SPARK_LOCAL_IP=192.168.2.102
# JAVA_HOME
JAVA_HOME=/opt/module/jdk
# SCALA_HOME
SCALA_HOME=/opt/module/scala
尖叫提示:SPARK_LOCAL_IP 每个节点分别修改
下方配置,用来告诉,可以在这里配置什么信息,此时可以不用配置
#Hadoop 配置文件目录
HADOOP_CONF_DIR=/opt/module/hadoop/etc/hadoop
#spark日志目录
SPARK_LOG_DIR=/opt/module/spark/log
#集群守护进程pid文件目录
SPARK_PID_DIR=/opt/module/spark/pid
#Spark临时文件目录
SPARK_LOCAL_DIRS=/opt/module/spark/tmp
11、将配置好的Spark拷贝到其他节点上
[victor@node1 module]$ rsync -rvl spark-2.1.1-bin-hadoop2.7 victor@node2:/opt/module
[victor@node1 module]$ rsync -rvl spark-2.1.1-bin-hadoop2.7 victor@node3:/opt/module
[victor@node1 module]$ rsync -rvl spark victor@node2:/opt/module/
[victor@node1 module]$ rsync -rvl spark victor@node3:/opt/module/
12、在master节点上启动Spark集群
[victor@node1 ~]$ cd /opt/module/spark/
[victor@node1 ~]$ sbin/start-all.sh
13、web浏览器页面查看
http://node1:8080/
14、命令方式jps查看
[victor@node1 module]$ jps
6978 Jps
6820 Master
[victor@node2 module]$ jps
6967 Jps
6905 Worker
[victor@node3 module]$ jps
6716 Jps
6623 Worker
尖叫提示:如果遇到 “JAVA_HOME not set” 异常
可以在sbin目录下的spark-config.sh 文件中
加入"export JAVA_HOME= /opt/module/jdk1.8.0_144"
15、执行一个spark程序(Standalone)
[victor@node1 spark]$ bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://node1:7077 \
--executor-memory 1G \
--total-executor-cores 2 \
/opt/module/spark/examples/jars/spark-examples_2.11-2.1.1.jar \
100
参数说明:
--master spark://node1:7077 指定Master的地址
--executor-memory 1G 指定每个executor可用内存为1G
--total-executor-cores 2 指定每个executor使用的cup核数为2个
该算法是利用蒙特•卡罗算法求PI(π)
16、进入客户端
[victor@node1 spark]$ bin/spark-shell --master spark://node1:7077
尖叫提示:不写 --master 进入本地模式