当前位置: 首页 > news >正文

在Spark集群中搭建Standalone

1.Standalone模式介绍

Spark Standalone 模式是一种独立的集群部署模式,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他资源管理系统。在该模式中,Spark 集群由 Master 节点和 Worker 节点构成,使用内置的 Standalone 框架进行资源管理1。Master 是主控节点,负责接收 Client 提交的作业,管理 Worker,并命令 Worker 启动 Driver 和 Executor4。Worker 节点负责具体的 Executor 的启动运行,Executor 持有一个线程池,每个线程可以执行一个 task,为应用程序中要求缓存的 RDD 提供内存式存储

一句话理解是:它自带yarn功能。

2.Standalone模式准备

  • 硬件资源:根据业务需求和数据量大小,需要准备多台机器(linux,ip设置,能ping 百度),免密互联
    准备足够的服务器作为集群节点,考虑 CPU、内存、存储等资源。
  • 软件安装
    • JDK:安装 Java Development Kit,版本至少为 8。
    • Apache Spark:选择合适的版本下载并解压。
    • Scala:如果通过 Scala 编写 Spark 应用,需要安装对应版本的 Scala。

3.Standalone模式的配置步骤

  1. 配置 Worker 节点:重命名slaves.template文件为slaves,编辑该文件,将原有的localhost替换为 Worker 节点的主机名或 IP 地址。
  2. 配置 Spark 集群运行参数:重命名spark-env.sh.template配置文件为spark-env.sh,编辑该文件,追加相关配置,如设置 JDK 目录、web 监控页面端口号、Zookeeper 集群地址等。
  3. 部署 Spark 到 Worker 节点:在 Worker 节点创建 Spark 目录,修改目录所有者,然后将 Master 节点上的 Spark 文件和环境变量发送到 Worker 节点,并在 Worker 节点刷新环境变量。
  4. 启动 Spark 集群:先启动所有节点的 Zookeeper,然后在 Master 节点使用start - all.sh脚本启动 Spark 集群,也可在备用节点使用start - master.sh启动备用 Master。

在开始配置之前,请确保三台虚拟机都正确启动了!

具体配置步骤如下。

1.上传spark安装包到某一台机器(例如:hadoop100)。 spark.3.1.2-bin-hadoop3.2.tgz。

2.解压。 把第一步上传的安装包解压到/opt/module下(也可以自己决定解压到哪里)。对应的命令是:tar -zxvf spark-3.3.1-bin-hadoop3.tgz -C /opt/module/

3.重命名。进入/opt/module/把解压的内容重命名一下,mv spark-3.1.1-bin-hadoop3.2/ spark-standalone

4.配置环境变量,更新spark路径。/etc/profile.d/my_env.sh。

5.同步环境变量,并使用source命令让它生效。

6.修改workers.template文件。这个文件在spark的安装目录下的conf目录下,先把名字改为workers,然后把内容设置为三台机器的主机名,具体如下。

hadoop100
hadoop101
hadoop102

7.修改spark-env.sh.template文件。先把名字改成spark-env.sh,然后修改内容,添加JAVA_HOME环境变量和集群对应的master节点以及通信端口,具体如下。

SPARK_MASTER_HOST=hadoop100
SPARK_MASTER_PORT=7077

8.同步设置完毕的Spark目录到其他节点。使用我们之前封装的命令:

xsync /opt/module/spark-standalone/

9.启动SPARK集群。进入到hadoop100机器,切换目录到/opt/module/spark-standalone/sbin下,运行命令 ./start-all.sh。

注意,这里不要省略./,它表示的是当前目录下的start-all命令,如果省略了./,它就会先去环境变量PATH中指定的目录来找这个命令。

10.验收效果。通过jps命令去每台机器上查看运行的进程。请观察是否在hadoop100上看到了master,worker在hadoop101,hadoop102上看到了worker。

11.查看启动效果。打开浏览器,输入hadoop100:8080。看到效果如下:

4.提交Spark作业

  1. 编写 Spark 作业代码:创建一个 Scala 或 Java 文件,编写 Spark 作业代码,例如实现一个简单的单词计数功能。在代码中通过SparkSession.builder指定master("spark://<master - ip>:7077")来连接到 Spark 集群的 Master 节点。
  2. 将应用程序打包成 jar 文件:在项目根目录下创建build.sbt文件(如果是 Scala 项目),使用相关命令将应用程序打包成 jar 文件。
  3. 提交作业到 Spark 集群:使用spark - submit命令提交作业,指定 Spark master 的 IP 和 jar 文件的位置,以及其他必要的参数,如应用程序的入口类、传入的参数等。

把spark程序提交给集群执行。切换到目录 /opt/module/spark-standalone/bin下,可以看到有一个spark-submit可执行文件,我们通过它来提交任务。它支持的参数如下:

--class  Spark 程序中包含主函数的类

--master  Spark 程序运行的模式 (环境)

--deploy-mode master 设为 Yarn 模式之后,使用的模式,可以选择client 和 cluster

--driver-cores master 设为 Yarn 模式之后,设置 driver 端的 cores 个数

--driver-memory master 设为 Yarn 模式之后,用于设置 driver 进程的内存(单位 G 或单位 M)

--num-executors master 设为 Yarn 模式之后,用于设置 Spark 作业总共要用多少个 Executor 进程来执行

--executor-memory 指定每个 executor 可用内存(单位 G 或单位 M)

--total-executor-cores 2 指定所有 executor 使用的 cpu 核数为 2 个

--executor-cores 指定每个 executor 使用的 cpu 核数

application-jar 打好包的应用 jar,包含依赖。这个 URL 在集群中全局可见。比如 hdfs 的共享存储系统,如果是 file://path,那么所有的节点的 path 都包含同样的 jar

application-arguments: 传递给main()方法的参数

提交Spark作业

spark-submit --class org.apache.spark.examples.SparkPi --master spark://hadoop100:7077 /opt/module/spark-standalone/examples/jars/spark-examples_2.12-3.1.1.jar 10

运行结果截图:

在hadoop100:8080上查看:

5.配置历史服务器

如果Spark服务重新启动,那么hadoop100:8080这里记录的运行记录就消失了。大家可以通过./stop-all.sh 来停止spark集群,然后再通过start-all来重新启动集群。看看是否还有记录。

我们需要有一个能够查看历史任务的功能。请注意,我们会把历史任务的记录保存在hdfs集群文件中,所以,这里需要hdfs服务的支持。

具体步骤如下:

1.停止任务。进入/opt/module/spark-standalone/sbin, 运行命令 ./stop-all.sh

2.修改/opt/module/spark-standalone/conf/spark-default.conf.temple。修改名字,改成spark-default.conf,再补充两个设置。如下所示。

具体代码如下

spark.eventlog.enable true
spark.eventlog.dir hdfs://hadoop100:8020/directory

代码说明:这里指定了历史任务相关的信息要保存在集群的/directory文件夹下,所以要确保我们有这个目录,并且hdfs服务时是开启的状态。

3.启动hadoop的hdfs服务(start-dfs.sh),并在根目录创建目录directory。可以通过命令行的方式来创建,也可以通过hadoop100:9870的页面操作来创建。

4.修改spark-env.sh文件。添加一句设置:

export SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://hadoop100:8020/directory"

5.分发修改之后的配置文件到集群的其他机器。

xsync /opt/module/spark-standalone/conf/

6.重新启动spark集群。命令是./start-all.sh

7.启动历史服务器:命令是 ./start-history-server.sh

检查spark-standalone/logs

8.在18080端口下看效果。此时应该是没有任务的。

9.重新提交一个新的任务,再次回到18080下,看看是否已经有了任务。

总结:

  1. 配置spark - defaults.conf文件:将spark - defaults.conf.template文件重命名为spark - defaults.conf,添加配置spark.eventLog.dir hdfs://<namenode - ip>:<port>/spark - job - log,指定的 HDFS 目录必须提前存在。

  2. 修改spark - env.sh文件:添加配置export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=30 -Dspark.history.fs.logDirectory=hdfs://<namenode - ip>:<port>/spark - job - log"

  3. 分发配置文件:将修改后的配置文件分发给集群中的各个节点。

  4. 启动历史服务:先启动 HDFS,然后使用start - history - server.sh脚本启动历史服务器。

  5. 登录 Web 界面:在浏览器中输入http://<history - server - ip>:18080访问 Spark History Server 的 Web 界面,查看作业的历史记录。

相关文章:

  • 2025“钉耙编程”中国大学生算法设计春季联赛(8)10031007
  • 嵌入式开发学习日志Day11
  • 【403 Error】Atcoder Beginner Contest 403 题解
  • Redo log,Undo log和binlog
  • 系统思考提升培训效能
  • 培养一个输出型的爱好
  • 【Git】项目多个分支开发、维护与优化处理 ing
  • miniconda在ARM64位芯片上面的安装
  • Windows应用-屏幕截图
  • 解决 shadui组件库Popover 点击后会消失
  • 【蓝桥杯省赛真题58】Scratch画台扇 蓝桥杯scratch图形化编程 中小学生蓝桥杯省赛真题讲解
  • 人工智能与机器学习:Python从零实现K-Means 算法
  • frp内网穿透的基础使用
  • 疫苗接种体系进入“全生命周期”时代:公共卫生治理再提速
  • Lustre/Scade 语言时序算子与形式化验证的联系
  • 多元函数微分之传统方法和全微分法
  • 电子监管码预检剔除装置提示盒尺寸过短
  • php 需要学会哪些技术栈,掌握哪些框架
  • 架构风格对比
  • new的使用
  • 10台核电新机组获核准,上海核电厂商独揽超500亿元订单
  • 特朗普声称中方领导人打了电话,外交部:近期中美元首没有通话
  • 日韩 “打头阵”与美国贸易谈判,汽车、半导体产业忧虑重重
  • 纪录电影《中国有戏:天幕计划》启动,有望太空播放
  • 新任海南琼海市委副书记陈明已主持市政府党组全面工作
  • 南国置业:控股股东电建地产拟受让公司持有的房地产开发业务等相关资产和负债