如何搭建spark yarn 模式的集群集群
(一)什么是SparkONYarn模式
Spark on YARN(Yet Another Resource Negotiator)是 Spark 框架在 Hadoop 集群中运行的一种部署模式,它借助 Hadoop YARN 来管理资源和调度任务。
架构组成
ResourceManager:作为 YARN 的核心,负责整个集群的资源管理和调度。它会接收来自各个应用程序的资源请求,并根据集群资源的使用情况进行合理分配。
NodeManager:部署在集群中的每个节点上,负责管理该节点上的资源使用情况,监控容器的运行状态,并且与 ResourceManager 保持通信,汇报节点的资源使用信息。
ApplicationMaster:在 Spark 应用启动时,YARN 会为其分配一个 ApplicationMaster。它的主要职责是向 ResourceManager 申请资源,并且与 NodeManager 协作,启动和管理 Spark 的 Executor 进程。
Spark Driver:负责执行用户编写的 Spark 应用程序代码,将其转化为一系列的任务,并调度这些任务到各个 Executor 上执行。
Executor:运行在 NodeManager 管理的容器中,负责具体执行 Spark 任务,并将执行结果返回给 Driver。
(二)运行流程
提交应用:用户通过命令行或者其他方式向 YARN 提交 Spark 应用程序。
启动 ApplicationMaster:ResourceManager 接收到应用程序的请求后,会在集群中的某个节点上启动一个 ApplicationMaster 进程。
申请资源:ApplicationMaster 向 ResourceManager 注册,并根据应用程序的需求申请资源。
启动 Executor:ResourceManager 根据资源分配情况,通知相应的 NodeManager 启动 Executor 进程。
任务执行:Spark Driver 将任务分发给各个 Executor 执行,Executor 执行完任务后将结果返回给 Driver。
应用结束:当所有任务执行完毕后,ApplicationMaster 向 ResourceManager 注销,释放占用的资源。
(三)模式分类
Client 模式:Driver 运行在客户端进程中,客户端会与 ApplicationMaster 和 Executor 进行通信。这种模式适用于交互式应用,例如使用 Spark Shell 进行数据探索和分析。在这种模式下,用户可以在客户端直接看到 Driver 的输出和日志信息,方便调试和监控应用程序的运行状态。
Cluster 模式:Driver 运行在集群中的某个节点上,由 ApplicationMaster 负责管理。这种模式适用于生产环境中的长时间运行的应用程序。在 Cluster 模式下,客户端提交应用程序后可以断开连接,应用程序会在集群中独立运行,不受客户端的影响。
(四)配置集群
1.上传并解压spark-3.1.2-bin-hadoop3.2.tgz,重命名解压之后的目录为spark-yarn。对应的命令是:tar -zxvf spark-3.3.1-bin-hadoop3.tgz -C /opt/module
2. 修改一下spark的环境变量,/etc/profile.d/my_env.sh 。
# spark 环境变量
export SPARK_HOME=/opt/module/spark-yarn
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
同步给其他的设备: xsync /etc/profile.d/
3.修改hadoop的配置。/opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml。因为测试环境虚拟机内存较少,防止执行过程进行被意外杀死,添加如下配置。
<!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
把这个设置分发到其他节点。使用xsync /opt/module/hadoop-3.1.3/etc/hadoop/同步一下。
4.修改spark配置。 把三个文件的名字重新设置一下。
workers.tempalte 改成 workers,spark-env.sh.template 改成 spark-env.sh,
spark-defaults.conf.template 改成 spark-defaults.conf。
然后,在workers文件中添加
hadoop100
hadoop101
hadoop102
在spark-env.sh文件中,添加如下
SPARK_MASTER_HOST=hadoop100
SPARK_MASTER_PORT=7077
HADOOP_CONF_DIR=/opt/module/hadoop-3.1.3/etc/hadoop
YARN_CONF_DIR=/opt/module/hadoop-3.1.3/etc/hadoop
export SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://hadoop100:8020/directory"
在spark-defaults.conf文件中,添加如下
spark.eventLog.enabled true
spark.eventLog.dir hdfs://hadoop100:8020/directory
spark.yarn.historyServer.address=hadoop100:18080
spark.history.ui.port=18080
5.同步配置文件到其他设备。xsync /opt/module/spark-yarn/sbin
第二课时
前面我们完成了配置,接下来,我们去启动集群。
(五)启动集群
注意这里要同时启动hadoop和spark。
1.启动hdfs和yarn。使用我们之前配置的脚本:myhadoop start
2.启动spark和spark的历史服务器。进入/opt/module/spark-yarn/sbin,运行: ./start-all.sh 和 ./start-history-server.sh
并通过jps去检查是否有对应的进程。
(六)提交任务到集群
使用spark-submit提交任务
spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster /opt/module/spark-standalone/examples/jars/spark-examples_2.12-3.1.1.jar 10
代码说明:
- spark-submit:这是 Spark 提供的用于提交 Spark 应用程序的脚本。
2. --class org.apache.spark.examples.SparkPi:指定了应用程序的主类,也就是包含 main 方法的类。这里的 org.apache.spark.examples.SparkPi 是 Spark 自带的示例程序,用于通过蒙特卡罗方法估算圆周率 π的值。
3. --master yarn:指定了 Spark 应用程序的运行模式为 YARN。YARN 是 Hadoop 的资源管理系统,能够为 Spark 应用程序分配资源。
4. --deploy-mode cluster:指定了应用程序的部署模式为集群模式。在集群模式下,Driver 进程会在 YARN 集群内部的某个节点上运行。
5. /opt/module/spark-standalone/examples/jars/spark-examples_2.12-3.1.1.jar:指定了包含应用程序代码的 JAR 文件的路径。
6. 10:这是传递给应用程序的参数,在 SparkPi 示例中,这个参数表示用于估算π的采样点数。
(七)查看运行结果
1. 在yarn任务面板页面中可以看到任务的信息。http://hadoop101:8088/cluster
2.点击history上的链接,可以跳转进入到spark的历史服务器的界面。