1、下载Spark安装包

官网网址:​​http://spark.apache.org/downloads.html​

Spark学习(二)Spark高可用集群搭建_spark

2、Spark安装过程

2.1、上传并解压缩

[potter@potter2 ~]$ tar -zxvf spark-2.3.0-bin-hadoop2.7.tgz -C apps/

2.2、修改配置文件

(1)进入配置文件所在目录

/home/potter/apps/spark-2.3.0-bin-hadoop2.7/conf

(2)修改spark-env.sh文件

复制spark-env.sh.template,​​并重命名为spark-env.sh​​,并在文件最后添加配置内容

注:

#export SPARK_MASTER_IP=hadoop1  这个配置要注释掉。 

集群搭建时配置的spark参数可能和现在的不一样,主要是考虑个人电脑配置问题,如果memory配置太大,机器运行很慢。 

说明: 

-Dspark.deploy.recoveryMode=ZOOKEEPER    #说明整个集群状态是通过zookeeper来维护的,整个集群状态的恢复也是通过zookeeper来维护的。就是说用zookeeper做了spark的HA配置,Master(Active)挂掉的话,Master(standby)要想变成Master(Active)的话,Master(Standby)就要像zookeeper读取整个集群状态信息,然后进行恢复所有Worker和Driver的状态信息,和所有的Application状态信息; 

-Dspark.deploy.zookeeper.url=potter2:2181,potter3:2181,potter4:2181,potter5:2181#将所有配置了zookeeper,并且在这台机器上有可能做master(Active)的机器都配置进来;(我用了4台,就配置了4台) 

-Dspark.deploy.zookeeper.dir=/spark 

这里的dir和zookeeper配置文件zoo.cfg中的dataDir的区别??? 

-Dspark.deploy.zookeeper.dir是保存spark的元数据,保存了spark的作业运行状态; 

zookeeper会保存spark集群的所有的状态信息,包括所有的Workers信息,所有的Applactions信息,所有的Driver信息,如果集群

(3)复制slaves.template变成slaves

添加以下内容:

(4)将安装包分发给其他节点

保存并使其立即生效

[potter@potter2 ~]$ source .bashrc

2.4、配置spark-defaults.conf

Spark默认是本地模式:

Spark学习(二)Spark高可用集群搭建_spark_02

进入/home/potter/apps/spark-2.3.0-bin-hadoop2.7/conf

复制一个spark-defaults.conf文件

[potter@potter2 conf]$ cp spark-defaults.conf.template spark-defaults.conf
[potter@potter2 conf]$ vi spark-defaults.conf


Spark学习(二)Spark高可用集群搭建_spark_03


分发到其他节点:

3.2、启动HDFS集群

任意一个节点执行即可

[potter@potter2 ~]$ start-dfs.sh

3.3、再启动Spark集群

3.4、查看进程

3.5、启动spark

出现以下就算启动成功:

Spark学习(二)Spark高可用集群搭建_spark_04

3.5、问题

查看进程发现spark集群只有hadoop1成功启动了Master进程,其他3个节点均没有启动成功,需要手动启动,进入到/home/hadoop/apps/spark/sbin目录下执行以下命令,3个节点都要执行

3.6、执行之后再次查看进程

Master进程和Worker进程都可以启动成功

4、验证

4.1、查看Web界面Master状态

potter2是ALIVE状态,potter3、potter4和potter5均是STANDBY状态

potter2

Spark学习(二)Spark高可用集群搭建_spark_05

potter3

Spark学习(二)Spark高可用集群搭建_hadoop_06

potter4

Spark学习(二)Spark高可用集群搭建_spark_07

potter5

Spark学习(二)Spark高可用集群搭建_spark_08

4.2、手动干掉potter2上面的Master进程,观察是否进行自动切换

干掉potter2上的Master进程之后,再次查看web界面

potter2节点,由于Master进程被干掉,所以界面无法访问

Spark学习(二)Spark高可用集群搭建_spark_09


potter3节点,Master被干掉之后,potter3节点上的Master成功篡位成功,成为ALIVE状态

Spark学习(二)Spark高可用集群搭建_spark_10

potter4

Spark学习(二)Spark高可用集群搭建_spark_07

potter5

Spark学习(二)Spark高可用集群搭建_spark_08

五、执行Spark程序on standalone

(1)执行第一个Spark程序

其中的spark://hadoop1:7077是下图中的地址

Spark学习(二)Spark高可用集群搭建_spark_13

运行结果:

Spark学习(二)Spark高可用集群搭建_spark_14

(2)启动spark-shell

参数说明:

–master spark://potter2:7077 指定Master的地址

–executor-memory 500m:指定每个worker可用内存为500m

–total-executor-cores 1: 指定整个集群使用的cup核数为1个

Spark学习(二)Spark高可用集群搭建_hadoop_15


注意:

如果启动spark shell时没有指定master地址,但是也可以正常启动spark shell和执行spark shell中的程序,其实是启动了spark的local模式,该模式仅在本机启动一个进程,没有与集群建立联系。

Spark Shell中已经默认将SparkContext类初始化为对象sc。用户代码如果需要用到,则直接应用sc即可

Spark Shell中已经默认将SparkSQl类初始化为对象spark。用户代码如果需要用到,则直接应用spark即可

(3)在spark shell中编写workcount程序
1)编写一个workcount.txt文件并上传到HDFS上的 / 目录下

workcount.txt的内容是:

2)在spark shell中用scala语言编写spark程序
scala> sc.textFile(”/workcount.txt").flatMap(.split(",")).map((,1)).reduceByKey(+).collect

说明:

sc是SparkContext对象,该对象是提交spark程序的入口

textFile("/spark/hello.txt")是hdfs中读取数据

flatMap(.split(" "))先map再压平
map((
,1))将单词和1构成元组

reduceByKey(+)按照key进行reduce,并将value累加

saveAsTextFile("/spark/out")将结果写入到hdfs中

运行结果:

Spark学习(二)Spark高可用集群搭建_spark_16

六、执行Spark程序on YARN

(1)前提

成功启动zookeeper集群、HDFS集群、YARN集群

(2)启动Spark on YARN
[potter@potter2 ~]$ spark-shell --master yarn --deploy-mode client

报错如下:

Spark学习(二)Spark高可用集群搭建_spark_17

报错原因:内存资源给的过小,yarn直接kill掉进程,则报rpc连接失败、ClosedChannelException等错误。

解决方法:

先停止YARN服务,然后修改yarn-site.xml,增加如下内容

将新的yarn-site.xml文件分发到其他Hadoop节点对应的目录下,最后在重新启动YARN。 

重新执行以下命令启动spark on yarn

[potter@potter2 hadoop]$ spark-shell --master yarn --deploy-mode client

Spark学习(二)Spark高可用集群搭建_spark_18


(3)打开YARN的web界面

打开YARN的web界面:http://potter4:8088

可以看到Spark shell应用程序正在运行

Spark学习(二)Spark高可用集群搭建_zookeeper_19

 单击ID号链接,可以看到该应用程序的详细信息

Spark学习(二)Spark高可用集群搭建_zookeeper_20

单击“ApplicationMaster”链接

Spark学习(二)Spark高可用集群搭建_spark_21

(4)运行程序

Spark学习(二)Spark高可用集群搭建_zookeeper_22


再次查看YARN的web界面

Spark学习(二)Spark高可用集群搭建_zookeeper_23

(5)执行Spark自带的示例程序PI

执行过程: