大数据Spark之——部署Spark环境(Linux)
2026/9/14 8:36:00 网站建设 项目流程

前期准备

查看网卡:

配置静态IP

vi /etc/sysconfig/network-scripts/ifcfg-ens32 ---- 根据自己网卡设置。

设置主机名

hostnamectl --static set-hostname 主机名

例如:

hostnamectl --static set-hostname hadoop001

配置IP与主机名映射

vi /etc/hosts

关闭防火墙

systemctl stop firewalld

systemctl disable firewalld

配置免密登录

传送门

一、JDK的安装

1、安装jdk

在/opt/model中上传jdk包并解压

tar -zxvf jdk-8u151-linux-x64.tar.gz

重命名,方便配置环境变量,避免更换jdk版本修改配置文件

2、配置Java环境变量

系统级(全局)

/etc/profile,/etc/bash.bashrc,/etc/bashrc

对所有用户生效

用户级(个人)

~/.bash_profile,~/.bashrc,~/.profile

只对当前用户生效

/etc/profile

✅ 几乎所有 Linux/Unix 系统都有

Ubuntu、CentOS、macOS 等

/etc/bashrc

✅ CentOS/RHEL 系统使用

CentOS、RHEL、Fedora

/etc/bash.bashrc

✅ Ubuntu 使用

Ubuntu、Debian

~/.bash_profile

✅ 用户可创建

所有支持 Bash 的系统

~/.profile

✅ Ubuntu 默认生成

Ubuntu、Debian

~/.bashrc

✅ 用户级 shell 配置

所有支持 Bash 的系统

vi /etc/profile

export JAVA_HOME=/opt/module/java #此处是自己实际的Java安装路径

export CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar

export PATH=\$PATH:\$JAVA_HOME/bin

3、加载环境变量

source /etc/profile

验证环境变量是否生效:

env | grep HOME

env | grep PATH

4、进行校验

二、Hadoop的环境搭建

见 https://blog.csdn.net/qq_41946216/article/details/134345137?spm=1001.2014.3001.5501

三、Spark的环境搭建

1、spark的下载安装

1.1. 下载

https://archive.apache.org/dist/spark/spark-3.3.1/
​下载 spark-3.3.1-bin-hadoop3.tgz 安装包

1.2 上传
使用xshell上传到指定安装路径

此处是安装路径是/opt/module

1.3 解压重命名

tar -xzvf spark-3.3.1-bin-hadoop3.tgz

mv spark-3.3.1-bin-hadoop3 spark

1.4 配置环境变量

vi /etc/profile

#SPARK_HOME

export SPARK_HOME=/opt/module/spark

export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

#export PYSPARK_PYTHON=xxx

#注意 :使用pyspark则配置PYSPARK_PYTHON 和虚拟环境,否则无需配置

1.5 加载环境变量

source /etc/profile

验证环境变量是否生效:

env | grep SPARK_HOME

env | grep PATH

1.6检验安装

spark-submit --version

出现下图说明安装成功

2、本地模式

本地模式(Local Mode):

开发测试专用。它不启动任何Spark服务进程,所有代码都在同一个JVM中运行,连网络通信都模拟了。所有进程(Driver和Executor)都运行在同一个JVM进程中,不涉及任何网络通信。

伪分布式模式即伪分布式模式

--master local[*] 或 不指定且spark-defaults.conf中的无任何配置

2.1. 配置 spark-env.sh

Spark环境变量由如下5个环境变量需要设置

01 JAVA_HOME: 告知Spark Java在哪里

02 HAD0OP_HOME: 告知Spark Hadoop安装在哪里

03 HADOOP_CONF_DIR:告知Spark Hadoop的配置文件在哪里

04 SPARK_HOME: 告诉Spark安装路径在哪里

cd $SPARK_HOME/conf

cp spark-env.sh.template spark-env.sh

vi spark-env.sh

export JAVA_HOME=/opt/module/java
export HADOOP_HOME=/opt/module/hadoop
export HADOOP_CONF_DIR=/opt/module/hadoop/etc/hadoop
export SPARK_HOME=/opt/module/spark

2.2. 本地模式测试

spark-submit \
--class org.apache.spark.examples.SparkPi \
$SPARK_HOME/examples/jars/spark-examples_*.jar 10

方式二:

spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[2] \
$SPARK_HOME/examples/jars/spark-examples_*.jar 10

二者区别:

对比项不指定 --master指定 --master
运行模式

取决于spark-defaults.conf中的配置

未配置,使用默认值local[*](本地模式)

强制使用本地模式
资源分配本地或 YARN 集群 CPU 核心使用本地固定CPU 核心
执行位置可能提交到 Hadoop YARN 集群只在当前机器上运行
适用场景生产环境(集群模式)开发测试、调试

注意:此方式返回结果返回到Driver端,即本地,如果返回结果过大,则会导致driver端挂掉。

3、Standalone单机模式

Standalone 模式

可用于小规模生产环境,或作为全链路压力测试的环境。因为它完整模拟了分布式调度、Shuffle、任务重试和容错机制,能真实反映应用在YARN/K8s上的行为。

3.1. 配置 spark-env.sh与master

Spark环境变量由如下5个环境变量需要设置

01 JAVA_HOME: 告知Spark Java在哪里

02 HAD0OP_HOME: 告知Spark Hadoop安装在哪里

03 HADOOP_CONF_DIR:告知Spark Hadoop的配置文件在哪里

04 SPARK_HOME: 告诉Spark安装路径在哪里

cd $SPARK_HOME/conf

cp spark-env.sh.template spark-env.sh

vi spark-env.sh

# ==================== 环境变量(通常不需要改) ====================
export JAVA_HOME=/opt/module/java
export HADOOP_HOME=/opt/module/hadoop
export HADOOP_CONF_DIR=/opt/module/hadoop/etc/hadoop
export SPARK_HOME=/opt/module/spark

# ==================== Master 配置 ====================
# 必填:Master节点的主机名,Worker和Driver通过这个地址连接Master
# Master的RPC通信端口(默认7077,一般不需要改)
# Master的Web UI端口(默认8080,用于浏览器查看集群状态)
export SPARK_MASTER_HOST=hadoop001
export SPARK_MASTER_PORT=7077
export SPARK_MASTER_WEBUI_PORT=8080


# ==================== Worker 配置 ====================
# 单台机器上启动的Worker实例数默认为1
# 每个Worker节点可用的CPU核心数
# 这里设置为12,留出2个核心给操作系统和系统进程使用
export SPARK_WORKER_CORES=2

# 每个Worker节点可用的内存大小
# 这里设置为48g,留出16GB给操作系统和文件缓存
export SPARK_WORKER_MEMORY=2g

# 每个Worker节点的Web UI端口(默认8081)
export SPARK_WORKER_WEBUI_PORT=8081


# ==================== 高级配置 ====================
# 【可选】单台机器上启动的Worker实例数
# 默认1。如果机器资源非常充足(如128核、512GB内存),可以设为2或更多
# 注意:每个实例会独立占用SPARK_WORKER_CORES和SPARK_WORKER_MEMORY
# export SPARK_WORKER_INSTANCES=1

# 【强烈推荐】Spark临时数据存储目录(用于Shuffle、溢写等)
# 使用本地磁盘(如SSD),不要用NFS或HDFS,否则Shuffle性能会严重下降
# 多个目录用逗号分隔,可以分摊I/O压力
export SPARK_LOCAL_DIRS=/opt/module/spark/data/spark-tmp

# ==================== 高可用配置(可选,生产环境推荐) ====================
# 如果使用ZooKeeper实现Master高可用,取消下面注释并填写ZK地址
# export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hadoop1:2181,hadoop2:2181,hadoop3:2181"

3.2. 配置 workers

cd $SPARK_HOME/conf

cp workers.template workers

vi workers

hadoop001

#hadoop002

#hadoop003

如果在集群上需要去掉 hadoop002 与 hadoop003 注释

3.3. 启动Master与worker

#启动:cd $SPARK_HOME/sbin./start-all.sh 或者分步启动-------------------------------# 启动Master $SPARK_HOME/sbin/start-master.sh # 启动所有Worker(会通过SSH免密登录到hadoop2和hadoop3启动) $SPARK_HOME/sbin/start-workers.sh

3.4. 查看进程

[root@hadoop001 sbin]#jps
19024 Worker
19082 Jps
18955 Master

如果是集群,则需要jps查看hadoop002 与 hadoop003上的 worker

3.5.Web UI验证

http://hadoop001:8080

3.6 Standalone单机模式测试

spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop001:7077 \
--deploy-mode client \
--total-executor-cores 2 \
--executor-memory 1g \
$SPARK_HOME/examples/jars/spark-examples_*.jar 10

4、Standalone集群模式

4.1. 配置 workers

cd $SPARK_HOME/conf

cp workers.template workers

vi workers

hadoop001

#hadoop002

#hadoop003

如果在集群上需要去掉 hadoop002 与 hadoop003 注释

4.2. 分发文件

注意:在分发文件前要做好三台机器的IP与主机名映射 /etc/hosts

进行分发文件

scp -r /opt/module/spark root@hadoop002:/opt/module/spark
scp -r /opt/module/spark root@hadoop003:/opt/module/spark

scp -r /etc/profile root@hadoop002:/etc/profile
scp -r /etc/profile root@hadoop003:/etc/profile

让三台机器文件生效

hadoop001 source /etcprofile
hadoop002 source /etcprofile
hadoop003 source /etcprofile

4.3. 启动Master与worker

#在 Master节点Hadoop001上启动:cd $SPARK_HOME/sbin./start-all.sh 或者分步启动-------------------------------# 启动Master $SPARK_HOME/sbin/start-master.sh # 启动所有Worker(会通过SSH免密登录到hadoop2和hadoop3启动) $SPARK_HOME/sbin/start-workers.sh

4.4. 查看进程

hadoop001节点:

hadoop002节点:

hadoop003节点:

4.5.Web UI验证

http://hadoop001:8080

4.6 Standalone 集群模式测试

spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop001:7077 \
--deploy-mode client \
--total-executor-cores 2 \
--executor-memory 1g \
$SPARK_HOME/examples/jars/spark-examples_*.jar 10

spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop001:7077 \
--deploy-mode cluster\
--total-executor-cores 2 \
--executor-memory 1g \
$SPARK_HOME/examples/jars/spark-examples_*.jar 10

5、Spark On Yarn模式

5.1. 配置 spark-env.sh

Spark环境变量由如下5个环境变量需要设置

01 JAVA_HOME: 告知Spark Java在哪里

02 HAD0OP_HOME: 告知Spark Hadoop安装在哪里

03 HADOOP_CONF_DIR:告知Spark Hadoop的配置文件在哪里

04 SPARK_HOME: 告诉Spark安装路径在哪里

cd $SPARK_HOME/conf

cp spark-env.sh.template spark-env.sh

vi spark-env.sh

# ==================== 环境变量(通常不需要改) ====================
export JAVA_HOME=/opt/module/java
export SPARK_HOME=/opt/module/spark

export HADOOP_HOME=/opt/module/hadoop

# ===== 核心配置:连接 Hadoop/YARN 集群(二选一即可) =====
# 推荐设置 HADOOP_CONF_DIR,指向包含 core-site.xml, hdfs-site.xml, yarn-site.xml 的目录
# Spark 会从这里读取 YARN ResourceManager 和 HDFS 的地址[citation:1][citation:5]

export HADOOP_CONF_DIR=/opt/module/hadoop/etc/hadoop

5.2. 配置 spark-defualt.conf

cd $SPARK_HOME/conf

cp spark-defaults.conf.template spark-defaults.conf

vi spark-defaults.conf

# ===== Spark on YARN 通用配置 =====
# 如果 Spark 自身的 JAR 包已上传到 HDFS,可配置此项以加速任务启动
# spark.yarn.jars hdfs:///path/to/spark-jars/*.jar

# ===== 动态资源分配(可选,建议生产环境开启) =====
# 需配合 External Shuffle Service 使用[citation:6]
spark.dynamicAllocation.enabled true
spark.dynamicAllocation.minExecutors 0
spark.dynamicAllocation.maxExecutors 20
spark.dynamicAllocation.initialExecutors 0

# ===== 性能相关可选参数 =====
# 堆外内存配置,避免因内存开销过大导致 Container 被 YARN 杀死[citation:4]
# spark.yarn.executor.memoryOverhead 1024
# spark.yarn.driver.memoryOverhead 1024

5.3. 单机模式测试

spark-submit \
--master yarn \
--deploy-mode client \
--class org.apache.spark.examples.SparkPi \
--driver-memory 2g \
--executor-memory 2g \
--executor-cores 2 \
--num-executors 2 \
$SPARK_HOME/examples/jars/spark-examples_*.jar 10

5.4. 集群模式

注意:在分发文件前要做好三台机器的IP与主机名映射 /etc/hosts

进行分发文件

scp -r /opt/module/spark root@hadoop002:/opt/module/spark
scp -r /opt/module/spark root@hadoop003:/opt/module/spark

scp -r /etc/profile root@hadoop002:/etc/profile
scp -r /etc/profile root@hadoop003:/etc/profile

让三台机器文件生效

hadoop001 source /etc/profile
hadoop002 source /etc/profile
hadoop003 source /etc/profile

5.5 集群模式测试

spark-submit \
--master yarn \
--deploy-mode client \
--class org.apache.spark.examples.SparkPi \
--driver-memory 2g \
--executor-memory 2g \
--executor-cores 2 \
--num-executors 2 \
$SPARK_HOME/examples/jars/spark-examples_*.jar 10

spark-submit \
--master yarn \
--deploy-mode cluster\
--class org.apache.spark.examples.SparkPi \
--driver-memory 2g \
--executor-memory 2g \
--executor-cores 2 \
--num-executors 2 \
$SPARK_HOME/examples/jars/spark-examples_*.jar 10

6、集群管理器、资源提供模式及 Driver部署方式

6.1.集群管理器

本地模式Standalone单机模式、Standalone集群模式、Spark on Yarn模式的集群管理器区别:

Local 模式:用 --master local[*] 强制指定与Excutor所有的资源调度都由当前JVM进程内部的一个线程池模拟完成。客户单与Driver都在同一个机器。

Standalone:是Spark内置的集群管理器,用于资源管理与调度及运算。内有Master进程和worker进程,Master用于调度资源,worker用于执行Excutor。单机与集群均需启动Master与worker进程。

Spark on Yarn模式:是使用外部Yarn集群管理器。无需Master和worker。

6.2. 资源提供模式

本地模式、Standalone单机模式、Standalone集群模式、Spark on Yarn模式的spark任务提交,可以指定资源提供方式,

使用 --master 指定资源提供方式:

常见的--master含义资源由谁管理
local[*]本地模式,用本机多线程模拟无,直接使用本机 JVM
spark://host:7077Standalone 集群模式Spark 自带的 Master 进程
yarnYARN 集群模式Hadoop 的 ResourceManager
k8s://...Kubernetes 集群模式Kubernetes API Server
mesos://...Mesos 集群模式Mesos Master

6.3. Driver部署方式

本地模式、Standalone单机模式、Standalone集群模式、Spark on Yarn模式的spark任务提交,可以指定Driver部署方式,

使用--deploy-mode指定Driver部署方式:

Driver 位置特点
client执行spark-submit的机器上日志实时可见,但客户端不能断开连接
cluster集群内部(由资源管理器调度)客户端可断开,稳定适合生产,日志需通过 Web UI 查看

重点是一般会选择cluster,因为client因为 在执行的时候,driver是运行在 执行spark-submit的机器上,且会有返回结果到控制台,如果返回结果过大,则会导致此节点进程被杀死或内存溢出等问题,甚至宕机。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询