Spark的安装模式一般分为三种:1.伪分布模式:即在一个节点上模拟一个分布式环境,master和worker共用一个节点,这种模式一般用于开发和测试Spark程序;2.全分布模式:即真正的集群模式,master和worker部署在不同的节点之上,一般至少需要3个节点(1个master和2个worker),这种模式一般用于实际的生产环境;3.HA集群模式:即高可用集群模式,一般至少需要4台机器(1个主master,1个备master,2个worker),这种模式的优点是在主master宕机之后,备master会立即启动担任master的职责,可以保证集群高效稳定的运行,这种模式就是实际生产环境中多采用的模式。本小节来介绍Spark的全分布模式的安装和配置。
1.linux环境准备和搭建Hadoop全分布环境
Hadoop全分布模式的搭建过程请参看前面的文章:
linux环境和Hadoop环境搭建
2.安装Scala
由于Scala只是一个应用软件,只需要安装在master节点即可。
1.上传scala安装包:scala-2.11.8
2.解压scala安装包:tar -zxvf scala-2.11.8.tgz
3.环境变量配置(三台机器都做一遍):
]# vim /root/.bash_profile
SCALA_HOME=/usr/local/src/scala-2.11.8
export SCALA_HOME
PATH=$SCALA_HOME/bin:$PATH
export PATH
4.使环境变量生效:[root@master scala-2.11.8]# source /root/.bash_profile
5.验证Scala是否安装成功:
输入scala命令,如下进入scala环境,则证明scala安装成功:
Welcome to Scala 2.12.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_144).
Type in expressions for evaluation. Or try :help.
scala>
5.分发到从节点:
scp -rp /usr/local/src/scala-2.11.8 slave1:/usr/local/src
scp -rp /usr/local/src/scala-2.11.8 slave2:/usr/local/src
3.安装spark
1.上传spark安装包:
[root@master spark-2.1.0-bin-hadoop2.7]# pwd
/usr/local/src/spark-2.1.0-bin-hadoop2.7
2.解压spark安装包:
]# tar -zxvf spark-2.1.0-bin-hadoop2.7.tgz
3.配置spark环境变量(三台机器都做一遍)
[root@master spark-2.1.0-bin-hadoop2.7]# vim /root/.bash_profile
SPARK_HOME=/usr/local/src/spark-2.1.0-bin-hadoop2.7
export SPARK_HOME
PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH
export PATH
使环境变量生效:]# source /root
4.配置spark参数:
4.1配置spark-env.sh文件:
]# cp spark-env.sh.template spark-env.sh
]# vim spark-env.sh
export JAVA_HOME=/usr/local/src/jdk1.8.0_162
export HADOOP_HOOME=/usr/local/src/hadoop-2.7.3
export HADOOP_CONF_DIR=/usr/local/src/hadoop-2.7.3/etc/hadoop
export SCALA_HOME=/usr/local/src/scala-2.11.8
export SPARK_MASTER_HOST=master
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_CORES=1
export SPARK_WORKER_MEMORY=1G
4.2配置slaves文件:
]# cp slaves.template slaves
]# vim slaves
slave1
slave2
4.3分发安装包给从节点:
将master上配置好的Spark安装目录分别复制给两个从节点slave1和slave2,并验证是否成功。
scp -rp spark-2.1.0-bin-hadoop2.7/ slave1:/usr/local/src/
scp -rp spark-2.1.0-bin-hadoop2.7/ slave2:/usr/local/src/
4.4在master节点上启动Spark全分布模式(启动之前已经启动了hadoop)
[root@master conf]# start-all.sh
starting org.apache.spark.deploy.master.Master, logging to /usr/local/src/spark-2.1.0-bin-hadoop2.7/logs/spark-root-org.apache.spark.deploy.master.Master-1-master.out
slave1: starting org.apache.spark.deploy.worker.Worker, logging to /usr/local/src/spark-2.1.0-bin-hadoop2.7/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-slave1.out
slave2: starting org.apache.spark.deploy.worker.Worker, logging to /usr/local/src/spark-2.1.0-bin-hadoop2.7/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-slave2.out
5.Spark的验证
5.1进程查看
[root@master conf]# jps
2709 SecondaryNameNode
4839 Jps
2522 NameNode
4763 Master
2863 ResourceManager
[root@slave1 ~]# jps
2288 NodeManager
2180 DataNode
2905 Jps
2846 Worker
[root@slave2 ~]# jps
2262 NodeManager
2153 DataNode
3467 Worker
3531 Jps
5.2使用浏览器监控Spark的状态:
浏览器访问:master:8080
5.3进入spark-shell
使用spark-shell命令进入SparkContext(即Scala环境):
[root@master ~]# spark-shell
Setting default log level to "WARN".
……
Welcome to
____ __
/ / ___ _____/ /__
\ / _ / _ `/ / '/
// ./_,// //_\ version 2.1.0
/_/
Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_144)
Type in expressions to have them evaluated.
Type :help for more information.
scala>
启动了spark-shell之后,可以使用4040端口访问其Web控制台页面(注意:如果一台机器上启动了多个spark-shell,即运行了多个SparkContext,那么端口会自动连续递增,如4041,4042,4043等等):
5.4 运行简单示例
-
本地模式:
]# ./bin/run-example SparkPi 10 --master local[2]
-
集群模式 Spark Standalone:
]# ./bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://master:7077 examples/jars/spark-examples_2.11-2.1.0.jar 100
集群模式 Spark on Yarn集群上yarn-cluster模式:
]# ./bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn-cluster examples/jars/spark-examples_2.11-2.1.0.jar 10
访问master:8088,找到运行完的application,点击查看logs日志如下:
5.5停止spark全分布式模式
[root@master ~]# stop-all.sh
slave2: stopping org.apache.spark.deploy.worker.Worker
slave1: stopping org.apache.spark.deploy.worker.Worker
stopping org.apache.spark.deploy.master.Master
Spark中常用的端口总结:
查看spark运行具体情况master端口:7077
查看spark运行状态master Web端口:8080
spark-shell 端口:4040
至此,Spark完全分布式环境搭建完成!