目录
Local模式:这种模式主要用于本地开发和测试。它可以启动一个或多个执行器,具体取决于你是否使用"local"还是"local [n]"来启动Spark应用。"local"模式表示利用本节点单核单线程运行,而"local [n]"则表示利用本节点多核多线程运行。
Standalone模式:这是独立模式,自带完整的服务,可以单独部署到一个集群中,无需依赖任何其他资源管理系统。从一定程度上说,该模式是其他三种模式的基础。目前Spark在Standalone模式下是没有任何单点故障问题的,这是借助ZooKeeper实现的。
Yarn模式:这种模式运行在YARN资源管理器框架之上,由YARN负责资源管理,Spark负责任务调度和计算。
Mesos模式:这种模式运行在Mesos资源管理器框架之上,由Mesos负责资源管理,Spark负责任务调度和计算。
Kubernetes模式:这是一种较新的部署模式,将Spark应用部署到Kubernetes集群中。
没有最好的部署模式,具体要根据实际需求进行部署,由于Spark可以和Hadoop部署在一起,相互协作,Hadoop的HDFS,HBase负责数据存储与管理,Spark负责数据的计算,所以本文将详细讲解Spark on YARN模式的部署。
1. Linux系统,CentOS7.6及以上
2. Hadoop3.3.5
3.JDK1.8版本及以上
4. spark3.4.0
5.集群架构
Hadoop集群架构 | Spark架构 | ? ? ? ? ? ? ?IP |
master | Master节点 | 192.168.244.131 |
hadoop01 | Worker节点 | 192.168.244.132 |
hadoop02 | Worker节点 | 192.168.244.133 |
访问Spark官网下载页面?
Index of /dist/spark (apache.org)https://archive.apache.org/dist/spark/
由于此前我们已经安装了Apache Hadoop3.3.5,所以,下载“
spark-3.4.0-bin-hadoop3-scala2.13.tgz
即可。
补充:
spark-3.4.0-bin-without-hadoop.tgz:这个版本是用于没有安装Hadoop环境下的Spark安装包。
spark-3.4.0-bin-hadoop3-scala2.13.tgz:这个版本是专为安装了Hadoop 3.x版本且使用Scala 2.13的用户而设计的。
spark-3.4.0-bin-hadoop3.tgz:这个版本则是为已经安装了Hadoop 3.x版本的用户提供的。
spark-3.4.0.tgz:这是Spark 3.4.0版本的通用安装包,适用于多种环境和组合。
通过xftp或rz命令将压缩包上传到Linux的/export/software目录
$ tar -zxvf /export/software/spark-3.4.0-bin-hadoop3-scala2.13.tgz -C /export/servers
$ cd /export/servers
$ ln -s spark-3.4.0-bin-hadoop3-scala2.13 spark
$ chowm -R hadoop:hadoop ./spark #第一个"Hadoop"是用户名,指的是拥有执行该命令权限的用户。第二个"Hadoop"则是文件或目录的所属组名,这个命令的作用是将当前目录下的所有文件和文件夹的所有权更改为hadoop用户和hadoop组。
1. 在Master节点终端执行以下命令
$ vim /etc/profile
# 在底部追加如下2行内容:
export SPARK_HOME=/export/servers/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
# 使环境变量生效
$ source /etc/profile
1.? 在Master节点执行以下命令将workers.template复制并命名为“workers”
$ cd /export/servers/spark
$ cp ./conf/workers.template ./conf/workers
$ vim ./conf/workers
2. 在workers文件中设置Spark集群的Worker节点。编辑workers文件的内容,把其中的默认内容“localhost”替换成内容如下。
hadoop02
hadoop03
3. 配置spark-env.sh
在Master节点执行以下命令将spark-env.sh.template复制命名为“spark-env.sh”
$ cd /export/servers/spark/conf
$ cp spark-env.sh.template spark-env.sh
编辑spark-env.sh文件内容
vim spark-env.sh
# 在顶部输入以下内容
# 配置Java安装路径
export JAVA_HOME=/export/servers/jdk
# 配置Hadoop的配置文件路径 // on yarn 模式 主要在这
export HADOOP_CONF_DIR=/export/servers/hadoop/etc/hadoop
# 配置MASTER的IP,由于前面做了主机名映射,这里也可以直接用主机名
export SPARK_MASTER_IP=192.168.224.131 #IP地址为Master的ip地址
在Master节点执行以下命令,将Master节点上的/export/servers/spark目录复制到各个worker节点
$ cd /export/servers/
$ scp -r ./spark-3.4.0-bin-hadoop3-scala2.13/ hadoop02:/export/servers/
$ scp -r ./spark-3.4.0-bin-hadoop3-scala2.13/ hadoop03:/export/servers/
#在node2和node3上,构建软链接,完成配置
$ cd /export/servers
$ ln -s spark-3.4.0-bin-hadoop3-scala2.13 spark
# 不推荐用mv修改目录的名字
在Spark中,根据运行模式的不同,有两种提交任务的方式:YARN-Client和YARN-Cluster。
YARN-Client模式:在此模式下,Driver程序运行在提交应用程序的客户端机器上,并通过客户端来监控和管理应用程序的执行过程。资源由客户端向YARN资源管理器请求。驱动程序首先向资源管理器注册应用程序,并由客户端协调Executor的启动和资源分配。这种模式通常适用于交互、调试和小规模的任务。提交任务时,只需要有Spark的安装包即可,不需要其他配置。
YARN-Cluster模式:与YARN-Client模式不同,此模式下的Driver程序运行在YARN集群中的某个Worker节点上。这样,Driver程序与Executor程序同在一个集群中,可以降低通信开销,因此适合在生产环境中使用。资源由YARN资源管理器自行分配和管理。驱动程序向资源管理器请求资源,并由资源管理器负责启动Executor进程并分配计算资源。
这两种模式的选择取决于实际需求和使用环境,例如,学习、调试阶段可能更适合使用YARN-Client模式,而在生产环境中则常使用YARN-Cluster模式。
$ spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster /export/servers/spark/examples/jars/spark-examples_2.13-3.4.0.jar 100 //指定跑100轮 能看到SUCCEEDED
run-example SparkPi 2>&1 | grep "Pi is" //用管道,stdout只输出Pi is roughly 3.14
1. 关闭master:stop-master.sh
2. 关闭worker:stop-workers.sh
3. 关闭Hadoop:stop-all.sh