安装基础
- Java8安装成功
- zookeeper安装成功
下载安装包
上传安装包到服务器
1 |
cd /opt/software/ |
解压安装包到指定目录
1 |
tar -zxvf spark-2.3.3-bin-hadoop2.7.tgz -C /opt/module/ |
修改配置文件
修改spark-env.sh
1 |
cd /opt/module/spark-2.3.3-bin-hadoop2.7/conf/ |
修改slave
1 |
mv slaves.template slaves |
分发安装目录到集群其他机器
1 |
scp -r /opt/module/spark-2.3.3-bin-hadoop2.7 node02:/opt/module |
修改集群spark环境变量,每台机器都执行
1 |
vim ~/.bash_profile |
启动集群
启动zookeeper集群,每台机器执行此命令
1 |
zkServer.sh start |
启动spark集群
1 |
$SPARK_HOME/sbin/start-all.sh |
特殊说明:
在哪里启动这个脚本,就在当前该机器启动一个Master进程,整个集群的worker进程的启动由slaves文件。
后期可以在其他机器单独在启动master
1 |
$SPARK_HOME/sbin/start-master.sh |
停止集群
在处于active Master主节点执行,可以关闭集群
1 |
$SPARK_HOME/sbin/stop-all.sh |
在处于standBy Master主节点执行
1 |
$SPARK_HOME/sbin/stop-master.sh |
查看进程
1 |
[hadoop@node01 software]$ xcall jps |
spark集群的web管理界面
当启动好spark集群之后,可以访问这样一个地址,http://node01:8080。
可以通过这个web界面观察到很多信息
- 整个spark集群的详细信息
- 整个spark集群总的资源信息
- 整个spark集群已经使用的资源信息
- 整个spark集群还剩的资源信息
- 整个spark集群正在运行的任务信息
- 整个spark集群已经完成的任务信息
高可用使用验证
启动master,作为standby
1 |
ssh node02 |
手动杀死node01上面的Master进程,观察是否会自动进行切换
1 |
[hadoop@node01 ~]$ jps |
node01节点,由于Master进程被杀死,所以界面无法访问
node02节点,Master被干掉之后,node02节点上的Master成功篡位成功,成为ALIVE状态
执行Spark程序on standalone
1 |
bin/spark-submit |
spark shell启动以及使用
1 |
bin/spark-shell |
特说说明:
如果启动spark shell时没有指定master地址,但是也可以正常启动spark shell和执行spark shell中的程序,其实是启动了spark的local模式,该模式仅在本机启动一个进程,没有与集群建立联系。
Spark Shell中已经默认将SparkContext类初始化为对象sc。用户代码如果需要用到,则直接应用sc即可
Spark Shell中已经默认将SparkSQl类初始化为对象spark。用户代码如果需要用到,则直接应用spark即可
spark-shell –master local[N] 读取HDFS上文件进行单词统计
1 |
cd /home/hadoop |
扩展知识点
如何恢复到上一次活着master挂掉之前的状态?
在高可用模式下,整个spark集群就有很多个master,其中只有一个master被zk选举成活着的master,其他的多个master都处于standby,同时把整个spark集群的元数据信息通过zk中节点进行保存。
后期如果活着的master挂掉。首先zk会感知到活着的master挂掉,下面开始在多个处于standby中的master进行选举,再次产生一个活着的master,这个活着的master会读取保存在zk节点中的spark集群元数据信息,恢复到上一次master的状态。整个过程在恢复的时候经历过了很多个不同的阶段,每个阶段都需要一定时间,最终恢复到上个活着的master的转态,整个恢复过程一般需要1-2分钟。
在master的恢复阶段对任务的影响?
对已经运行的任务是没有任何影响,由于该任务正在运行,说明它已经拿到了计算资源,这个时候就不需要master。
对即将要提交的任务是有影响,由于该任务需要有计算资源,这个时候会找活着的master去申请计算资源,由于没有一个活着的master,该任务是获取不到计算资源,也就是任务无法运行。