standalone模式
00_前提:
已经安装好java(java1.8.0_241)
已经安装好hadoop(hadoop2.10.0)
01_介绍
我们要构建一个由Master+Slave构成的Spark集群,而Spark就运行在集群中。
02_standalone开始配置
2.1复制spark,并命名为spark-standalone
cp -r spark-2.4.0-bin-hadoop2.7 spark-startalone
2.2进入conf,配置spark-env.sh,确定master
cd conf
for i in .template; do mv ${i} ${i%.}; done
vi spark-env.sh
SPARK_MASTER_HOST=node1
SPARK_MASTER_PORT=7077
2.3修改slaves文件,确定worker
vi slaves
node1
node2
node3
2.4 在sbin/spark-config.sh文件下添加JAVA_HOME
export JAVA_HOME=/usr/java/jdk1.8.0_241
2.5配置环境变量
vi /etc/profile
export SPARK_HOME=/usr/hadoop/spark-standalone
export PATH=$PATH:$SPARK_HOME/sbin:$SPARK_HOME/bin
source /etc/profile
2.6把spark-standalone分发到集群节点
scp -r spark-standalone / node2:/usr/hadoop/
scp -r spark-standalone / node3:/usr/hadoop/
2.7在spark-standalone下启动集群
sbin/start-all.sh
2.8 spark的standalone集群基本配置完毕
8080端口访问masterUI
8081端口访问workeUI
4040端口driverUI,还没执行完可以看见,如果需要随时可以看见,需要配置历史服务。
2.9 例子1——计算Pi
[root@node1 spark-standalone]# bin/spark-submit \
> --master spark://node1:7077 \
> --class org.apache.spark.examples.SparkPi \
> ./examples/jars/spark-examples_2.11-2.4.0.jar 100
2.10例子2——shell中wordcount
[root@node1 spark-standalone]# bin/spark-shell --master spark://node1:7077
创建一个input目录,写个文件,里面写一些单词,然后在shell里读取,分割,洗牌,统计。和上面local差不多一样。
03_配置历史服务(通用,个别参数根据自己的修改即可)
3.1修改spark-default.conf文件
vi spark-defaults.conf
spark.eventLog.enabled true
spark.eventLog.dir hdfs://node1:8020/spark-logs
3.2进入hadoop安装目录后,执行命令:
bin/hadoop fs -mkdir /spark-logs
如果不放心该命令是否执行成功,可启动hadoop,访问50070端口对应的界面查看是否生成了该目录。
http://192.168.223.100:50070/
3.3修改spark-env.sh文件,添加如下配置
vi spark-env.sh
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=30 -Dspark.history.fs.logDirectory=hdfs://node1:8020/spark-logs"
(1) spark.history.ui.port
历史服务器的WebUI的端口号,默认为18080,也可以自行设置。
(2) spark.history.retainedApplications
设置缓存Cache中保存的应用程序历史记录的个数,默认50,如果超过这个值,旧的将被从内存中删除。但并不会从Hdfs中删除。
注:缓存文件数不表示实际显示的文件总数。只是表示不在缓存中的文件可能需要从硬盘读取,速度稍有差别。
(3) spark.history.fs.logDirectory
告诉Spark History Server(Spark历史服务)哪个目录记录着任务的日志信息。如果此时文件中配置了该选项,则稍后在启动Spark History Server 时就不必再指定具体目录了。目录可以是Hadoop APIs支持的任意文件系统。
3.4把修改的文件分发给其他虚拟机
scp spark-defaults.conf node2:/usr/hadoop/spark-standalone/conf/
scp spark-defaults.conf node3:/usr/hadoop/spark-standalone/conf/
scp spark-env.sh node2:/usr/hadoop/spark-standalone/conf/
scp spark-env.sh node3:/usr/hadoop/spark-standalone/conf/
3.5启动并查看Spark历史服务
start-dfs.sh
sbin/start-all.sh
sbin/start-history-server.sh
jps
http://192.168.223.100:18080/
3.6执行一个小任务
bin/spark-submit \
--master spark://node1:7077 \
--deploy-mode cluster \
--class org.apache.spark.examples.SparkPi \
./examples/jars/spark-examples_2.11-2.4.0.jar 10000
04_master-HA
4.1高可用原理
Standalone集群只有一个Master,如果Master挂了就无法提交应用程序,即存在单点故障的问题。需要给Master进行高可用配置,Master的高可用可以使用fileSystem(文件系统)和zookeeper(分布式协调服务)。
(1)基于文件系统的单点恢复—只用于开发或测试环境
fileSystem只有存储功能,可以存储Master的元数据信息,用fileSystem搭建的Master高可用,在Master失败时,需要我们手动启动另外的备用Master,这种方式不推荐使用。
(2)基于zookeeper的Standby Masters—可用于生产环境
zookeeper有选举和存储功能,可以存储Master的元素据信息,使用zookeeper搭建的Master高可用,当Master挂掉时,备用的Master会自动切换,推荐使用这种方式搭建Master的HA。为了使选举没有争议,要奇数个节点。
4.2配置HA
该HA方案使用起来很简单,首先启动一个ZooKeeper集群,然后在不同节点上启动Master,注意这些节点需要具有相同的zookeeper配置。
4.2.1修改spark-env.sh 文件
vi spark-env.sh
#SPARK_MASTER_HOST=node1
#SPARK_MASTER_PORT=7077
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=30 -Dspark.history.fs.logDirectory=hdfs://node1:8020/spark-logs"
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node1:2181,node2:2181,node3:2181 -Dspark.deploy.zookeeper.dir=/spark-nodes"
spark.deploy.recoveryMode:恢复模式
spark.deploy.zookeeper.url:ZooKeeper的Server地址
spark.deploy.zookeeper.dir:保存集群元数据信息的文件、目录。包括 Worker、Driver、Application信息。
4.2.2分发上面这个配置文件
scp spark-env.sh node2:/usr/hadoop/spark-standalone/conf/
scp spark-env.sh node3:/usr/hadoop/spark-standalone/conf/
4.2.3启动spark服务
start-dfs.sh
start-yarn.sh
sbin/start-all.sh
sbin/start-history-server.sh
zkServer.sh start
sbin/start-master.sh
4.3查看服务
访问master的spark管理界面是活跃的,而另一台master是待定的,假如第一台宕机,zookeeper安排第二台走马上任。
http://192.168.223.100:8080/
http://192.168.223.101:8080/
4.4 测试HA
测试主备切换
- 在第一台master上使用jps查看master进程id
- 使用kill -9 id号强制结束该进程
- 稍等片刻后刷新第二台master的web界面发现第二台master为Alive
4.5执行小任务
4.5.1词频统计
bin/spark-shell --master spark://node1:7077,node2:7077,node3:7077
后面的同local下那个类似,如有疑问,参考另一篇spark系列——运行模式1:local模式配置
4.5.2例子计算
bin/spark-submit \
> --master spark://node1:7077,node2:7077,node3:7077 \
> --deploy-mode client \
> --class org.apache.spark.examples.SparkPi \
> ./examples/jars/spark-examples_2.11-2.4.0.jar 100
4.5.3例子计算
bin/run-example --master spark://node1:7077,node2:7077,node3:7077 SparkPi
注:例子是自带的