1、下载Spark安装包
官网网址:http://spark.apache.org/downloads.html
2、Spark安装过程
2.1、上传并解压缩
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)将安装包分发给其他节点
保存并使其立即生效
2.4、配置spark-defaults.conf
Spark默认是本地模式:
进入/home/potter/apps/spark-2.3.0-bin-hadoop2.7/conf
复制一个spark-defaults.conf文件
分发到其他节点:
3.2、启动HDFS集群
任意一个节点执行即可
3.3、再启动Spark集群
3.4、查看进程
3.5、启动spark
出现以下就算启动成功:
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
potter3
potter4
potter5
4.2、手动干掉potter2上面的Master进程,观察是否进行自动切换
干掉potter2上的Master进程之后,再次查看web界面
potter2节点,由于Master进程被干掉,所以界面无法访问
potter3节点,Master被干掉之后,potter3节点上的Master成功篡位成功,成为ALIVE状态
potter4
potter5
五、执行Spark程序on standalone
(1)执行第一个Spark程序
其中的spark://hadoop1:7077是下图中的地址
运行结果:
(2)启动spark-shell
参数说明:
–master spark://potter2:7077 指定Master的地址 –executor-memory 500m:指定每个worker可用内存为500m –total-executor-cores 1: 指定整个集群使用的cup核数为1个 |
注意:
如果启动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程序
说明:
sc是SparkContext对象,该对象是提交spark程序的入口 textFile("/spark/hello.txt")是hdfs中读取数据 flatMap(.split(" "))先map再压平 reduceByKey(+)按照key进行reduce,并将value累加 saveAsTextFile("/spark/out")将结果写入到hdfs中 |
运行结果:
六、执行Spark程序on YARN
(1)前提
成功启动zookeeper集群、HDFS集群、YARN集群
(2)启动Spark on YARN
报错如下:
报错原因:内存资源给的过小,yarn直接kill掉进程,则报rpc连接失败、ClosedChannelException等错误。
解决方法:
先停止YARN服务,然后修改yarn-site.xml,增加如下内容
将新的yarn-site.xml文件分发到其他Hadoop节点对应的目录下,最后在重新启动YARN。
重新执行以下命令启动spark on yarn
(3)打开YARN的web界面
打开YARN的web界面:http://potter4:8088
可以看到Spark shell应用程序正在运行
单击ID号链接,可以看到该应用程序的详细信息
单击“ApplicationMaster”链接
(4)运行程序
再次查看YARN的web界面
(5)执行Spark自带的示例程序PI
执行过程: