搭建Spark Standalone集群

文章目录

  • 一,Spark Standalone架构
    • (一)client提交方式
    • (二)cluster提交方式
  • 二,Spark集群拓扑
  • 三,前提条件:安装配置了分布式Hadoop环境
  • 四,在master虚拟机上安装配置Spark
    • (一)将spark安装包上传到master虚拟机
    • (二)将spark安装包解压到指定目录
    • (三)配置spark环境变量
    • (四)编辑spark环境配置文件
    • (五)创建slaves文件,添加从节点
  • 五,在slave1虚拟机上安装配置Spark
    • (一)把master虚拟机上安装的spark分发给slave1虚拟机
    • (二)将master虚拟机上环境变量配置文件分发到slave1虚拟机
    • (三)在slave1虚拟机上让spark环境配置文件生效
  • 六,在slave2虚拟机上安装配置Spark
    • (一)把master虚拟机上安装的spark分发给slave2虚拟机
    • (二)将master虚拟机上环境变量配置文件分发到slave2虚拟机
    • (三)在slave2虚拟机上让spark环境配置文件生效
  • 七,启动Spark Standalone集群
    • (一)启动hadoop的dfs服务
    • (二)启动Spark集群
  • 八,访问Spark的WebUI
  • 九,启动Scala版Spark Shell


一,Spark Standalone架构

搭建Spark Standalone集群_第1张图片

Spark Standalone模式为经典的Master/Slave(主/从)架构,资源调度是Spark自己实现的。在Standalone模式中,根据应用程序提交的方式不同,Driver(主控进程)在集群中的位置也有所不同。应用程序的提交方式主要有两种:client和cluster,默认是client。可以在向Spark集群提交应用程序时使用–deploy-mode参数指定提交方式。

(一)client提交方式

集群的主节点称为Master节点,在集群启动时会在主节点启动一个名为Master的守护进程,类似YARN集群的ResourceManager;从节点称为Worker节点,在集群启动时会在各个从节点上启动一个名为Worker的守护进程,类似YARN集群的NodeManager。

Spark在执行应用程序的过程中会启动Driver和Executor两种JVM进程。

Driver为主控进程,负责执行应用程序的main()方法,创建SparkContext对象(负责与Spark集群进行交互),提交Spark作业,并将作业转化为Task(一个作业由多个Task任务组成),然后在各个Executor进程间对Task进行调度和监控。通常用SparkContext代表Driver。在上图的架构中,Spark会在客户端启动一个名为SparkSubmit的进程,Driver程序则运行于该进程。

Executor为应用程序运行在Worker节点上的一个进程,由Worker进程启动,负责执行具体的Task,并存储数据在内存或磁盘上。每个应用程序都有各自独立的一个或多个Executor进程。在Spark Standalone模式和Spark on YARN模式中,Executor进程的名称为CoarseGrainedExecutorBackend,类似运行MapReduce程序所产生的YarnChild进程,并且同时与Worker、Driver都有通信。

(二)cluster提交方式

Standalone cluster提交方式提交应用程序后,客户端仍然会产生一个名为SparkSubmit的进程,但是该进程会在应用程序提交给集群之后就立即退出。当应用程序运行时,Master会在集群中选择一个Worker进程启动一个名为DriverWrapper的子进程,该子进程即为Driver进程,所起的作用相当于YARN集群的ApplicationMaster角色,类似MapReduce程序运行时所产生的MRAppMaster进程。

二,Spark集群拓扑

Spark Standalone模式的集群搭建需要在集群的每个节点都安装Spark,集群角色分配如下表所示:

节点 角色
master Master
slave1 Worker
slave2 Worker

三,前提条件:安装配置了分布式Hadoop环境

启动hadoop集群
搭建Spark Standalone集群_第2张图片

访问Hadoop WebUI界面
搭建Spark Standalone集群_第3张图片

四,在master虚拟机上安装配置Spark

(一)将spark安装包上传到master虚拟机

搭建Spark Standalone集群_第4张图片

(二)将spark安装包解压到指定目录

执行命令:tar -zxvf spark-3.3.2-bin-hadoop3.tgz -C /opt

搭建Spark Standalone集群_第5张图片

(三)配置spark环境变量

执行命令:vim /etc/profile
搭建Spark Standalone集群_第6张图片

# Spark 环境变量
export SPARK_HOME=/opt/spark-3.3.2
export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH

存盘退出后,执行命令:source /etc/profile,让配置生效

查看spark安装目录(bin、sbin和conf三个目录很重要)
搭建Spark Standalone集群_第7张图片

(四)编辑spark环境配置文件

进入spark配置目录后,执行命令:cp spark-env.sh.template spark-env.sh与vim spark-env.sh
搭建Spark Standalone集群_第8张图片

export JAVA_HOME=/usr/java/latest
export SPARK_MASTER_HOST=master
export SPARK_MASTER_PORT=7077
  1. JAVA_HOME:指定JAVA_HOME的路径。若集群中每个节点在/etc/profile文件中都配置了JAVA_HOME,则该选项可以省略,Spark集群启动时会自动读取。为了防止出错,建议此处将该选项配置上。
  2. SPARK_MASTER_HOST:指定集群主节点(master)的主机名,此处为master。
  3. SPARK_MASTER_PORT:指定Master节点的访问端口,默认为7077。

存盘退出,执行命令:source spark-env.sh,让配置生效
搭建Spark Standalone集群_第9张图片

(五)创建slaves文件,添加从节点

执行命令:vim slaves,添加两个从节点主机名
搭建Spark Standalone集群_第10张图片

五,在slave1虚拟机上安装配置Spark

(一)把master虚拟机上安装的spark分发给slave1虚拟机

执行命令:scp -r $SPARK_HOME root@slave1:$SPARK_HOME

搭建Spark Standalone集群_第11张图片

(二)将master虚拟机上环境变量配置文件分发到slave1虚拟机

在master虚拟机上,执行命令:scp /etc/profile root@slave1:/etc/profile
搭建Spark Standalone集群_第12张图片

在slave1虚拟机上,执行命令:source /etc/profile,让环境配置生效
搭建Spark Standalone集群_第13张图片

(三)在slave1虚拟机上让spark环境配置文件生效

在slave1虚拟机上,进入spark配置目录,执行命令:source spark-env.sh
搭建Spark Standalone集群_第14张图片

六,在slave2虚拟机上安装配置Spark

(一)把master虚拟机上安装的spark分发给slave2虚拟机

执行命令:scp -r $SPARK_HOME root@slave2:$SPARK_HOME
搭建Spark Standalone集群_第15张图片

(二)将master虚拟机上环境变量配置文件分发到slave2虚拟机

在master虚拟机上,执行命令:scp /etc/profile root@slave2:/etc/profile
搭建Spark Standalone集群_第16张图片

在slave2虚拟机上,执行命令:source /etc/profile,让环境配置生效
搭建Spark Standalone集群_第17张图片

(三)在slave2虚拟机上让spark环境配置文件生效

在slave2虚拟机上,进入spark配置目录,执行命令:source spark-env.sh
搭建Spark Standalone集群_第18张图片

七,启动Spark Standalone集群

Spark Standalone集群使用Spark自带的资源调度框架,但一般我们把数据保存在HDFS上,用HDFS做数据持久化,所以Hadoop还是需要配置,但是可以只配置HDFS相关的,而Hadoop YARN不需要配置。启动Spark Standalone集群,不需要启动YARN服务,因为Spark会使用自带的资源调度框架。

(一)启动hadoop的dfs服务

在master虚拟机上执行命令:start-dfs.sh
搭建Spark Standalone集群_第19张图片

(二)启动Spark集群

执行命令:start-all.sh
搭建Spark Standalone集群_第20张图片
查看start-all.sh的源码启动Master与Worker的命令

# Start Master
"${SPARK_HOME}/sbin"/start-master.sh
# Start Worker
s"${SPARK_HOME}/sbin"/start-slaves.sh

可以看到,当执行start-all.sh命令时,会分别执行start-master.sh命令启动Master,执行start-slaves.sh命令启动Worker。

注意:若spark-evn.sh中配置了SPARK_MASTER_HOST属性,则必须在该属性指定的主机上启动Spark集群,否则会启动不成功;若没有配置SPARK_MASTER_HOST属性,则可以在任意节点上启动Spark集群,当前执行启动命令的节点即为Master节点。

启动完毕后,分别在各节点执行jps命令,查看启动的进程。若在master节点存在Master进程,slave1节点存在Worker进程,slave2节点存在Worker进程,则说明集群启动成功。

查看master节点进程
搭建Spark Standalone集群_第21张图片

查看slave1节点进程
搭建Spark Standalone集群_第22张图片

查看slave2节点进程
搭建Spark Standalone集群_第23张图片

八,访问Spark的WebUI

在浏览器里访问:http://master:8080
搭建Spark Standalone集群_第24张图片
在浏览器访问:http://slave1:8081
搭建Spark Standalone集群_第25张图片
在浏览器访问:http://slave2:8081
搭建Spark Standalone集群_第26张图片

九,启动Scala版Spark Shell

执行命令:spark-shell --master spark://master:7077 (注意–master,两个-不能少)
搭建Spark Standalone集群_第27张图片
在slave1的/Txt目录里执行命令:vim test.txt
搭建Spark Standalone集群_第28张图片

搭建Spark Standalone集群_第29张图片

hello hadoop world
hello spark world
hello java and scala 
hello big data world
hello hadoop and spark

在HDFS上创建park目录,将test.txt上传到HDFS的/park目录
搭建Spark Standalone集群_第30张图片

读取HDFS上的文件,创建RDD,执行命令:val rdd = sc.textFile("hdfs://master:9000/park/test.txt")(说明:val rdd = sc.textFile(“/park/test.txt”)读取的依然是HDFS上的文件,绝对不是本地文件)
搭建Spark Standalone集群_第31张图片
收集rdd的数据,执行命令:rdd.collect
搭建Spark Standalone集群_第32张图片
进行词频统计,按单词个数降序排列,执行命令:val wordcount = rdd.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _).sortBy(_._2, false)wordcount.collect.foreach(println)
搭建Spark Standalone集群_第33张图片

你可能感兴趣的:(大数据,spark,大数据,hadoop,standalone,集群搭建)