前期准备
查看网卡:
配置静态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环境变量
系统级(全局) |
| 对所有用户生效 |
用户级(个人) |
| 只对当前用户生效 |
| ✅ 几乎所有 Linux/Unix 系统都有 | Ubuntu、CentOS、macOS 等 |
| ✅ CentOS/RHEL 系统使用 | CentOS、RHEL、Fedora |
| ✅ Ubuntu 使用 | Ubuntu、Debian |
| ✅ 用户可创建 | 所有支持 Bash 的系统 |
| ✅ Ubuntu 默认生成 | Ubuntu、Debian |
| ✅ 用户级 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/sparkscp -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 10spark-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/sparkexport 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/sparkscp -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 10spark-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:7077 | Standalone 集群模式 | Spark 自带的 Master 进程 |
yarn | YARN 集群模式 | 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的机器上,且会有返回结果到控制台,如果返回结果过大,则会导致此节点进程被杀死或内存溢出等问题,甚至宕机。