spark配置

First Post:

Last Update:

将所有指向其他节点(如 node01, node02)的操作都指向本机 (localhost),并简化分发和多节点启动的步骤。

1. 前提条件

这一步与教程一致。请确保您的伪分布式Hadoop集群(HDFS和YARN)能够正常运行。

  • Hadoop已正确配置。
  • Java环境已就绪(推荐JDK 8)。

2. 下载并解压 Spark

这一步也完全相同。您可以按照教程中的说明下载、上传并解压Spark。

1
2
3
4
5
6
# 假设您已将安装包上传到 /root/ 目录
# 解压到指定目录
tar -zxvf spark-3.3.4-bin-hadoop3.tgz -C /opt/

# 创建软链接便于管理
ln -s /opt/spark-3.3.4-bin-hadoop3 /opt/spark

3. 配置环境变量

这一步的配置内容完全一样。因为Spark需要知道Hadoop的配置文件在哪里。

1
2
# 编辑配置文件
vim /etc/profile

在文件末尾添加:

1
2
3
export SPARK_HOME=/opt/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

使配置生效:

1
source /etc/profile

4. 配置 Spark

这是需要修改的关键步骤之一

进入Spark配置目录:

1
cd $SPARK_HOME/conf

复制模板文件(这步和教程一样):

1
2
cp spark-env.sh.template spark-env.sh
cp workers.template workers

修改 spark-env.sh 文件:

1
vim spark-env.sh

主要修改 SPARK_MASTER_HOST 为您虚拟机的IP地址或者直接使用 localhost

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Java路径 (请根据您的实际路径填写)
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

# Hadoop配置文件路径 (通常无需修改)
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

# 【修改点】Spark主节点地址,改为localhost或者您虚拟机的IP
export SPARK_MASTER_HOST=localhost

# 【修改点】根据您虚拟机的配置调整内存和CPU核心数
# 例如,如果您的虚拟机总共有8G内存,4个核心,可以这样分配
export SPARK_WORKER_MEMORY=4g
export SPARK_WORKER_CORES=2

# Spark历史服务器配置 (这部分和教程一样)
export SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs:///user/spark/applicationHistory -Dspark.history.retainedApplications=30"

5. 配置 workers 文件

这是另一个关键修改点。在伪分布式环境中,Master节点同时也是Worker节点。

1
vim workers

将文件中的所有内容删除,只保留一行:

1
localhost

6. 配置 Spark 与 YARN 集成

这一步是为了让Spark程序能运行在YARN上,对于伪分布式环境同样适用。

创建 spark-defaults.conf 文件:

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

编辑 spark-defaults.conf 文件:

1
vim spark-defaults.conf

添加以下内容,注意修改IP地址为您虚拟机的IP或 localhost

1
2
3
4
5
6
7
8
9
10
# 【关键配置】指定Spark应用默认运行在YARN模式下
spark.master yarn

# 以下配置用于开启日志聚合,方便通过历史服务器查看应用运行情况
spark.eventLog.enabled true
spark.eventLog.dir hdfs:///user/spark/applicationHistory
spark.yarn.historyServer.address localhost:18080 # 【修改点】使用localhost或您的IP

# 【可选优化】指定Spark的jar包在HDFS中的位置,避免每次提交任务都上传
spark.yarn.jars hdfs:///user/spark/jars/*.jar

7. 分发 Spark 到所有节点

在伪分布式环境中,此步骤完全不需要,因为您只有一个节点。

8. 准备 HDFS 目录

这一步与教程完全相同,目的是在HDFS上创建Spark运行所必需的目录。

1
2
3
4
5
6
7
8
9
# 启动您的HDFS (如果尚未启动)
# start-dfs.sh

# 创建Spark需要的HDFS目录
hdfs dfs -mkdir -p /user/spark/applicationHistory
hdfs dfs -mkdir -p /user/spark/jars

# 复制Spark的jar包到HDFS
hdfs dfs -put $SPARK_HOME/jars/* /user/spark/jars/

9. 启动 Spark 集群

教程中的启动命令有些混杂,这里为您梳理一下伪分布式环境下的正确启动方式。

方式一:启动Spark独立集群(Standalone模式)
如果您想先体验Spark自身的集群模式,可以这样启动。

1
2
# 该脚本会根据workers文件启动Master和Worker
$SPARK_HOME/sbin/start-all.sh

方式二:不启动Spark独立集群,直接使用YARN
由于我们在第6步 spark-defaults.conf 中已经指定了 spark.masteryarn,因此我们无需启动Spark的Master和Worker进程 (start-all.sh)。我们只需要保证Hadoop的YARN是启动的即可。

1
2
# 确保YARN已启动
# start-yarn.sh

启动历史服务器(两种方式下都需要):
这个服务是独立的,用于查看已完成的Spark应用。

1
$SPARK_HOME/sbin/start-history-server.sh

10. 查看Spark进程

使用 jps 命令查看进程。

  • 如果使用方式一 (Standalone) 启动,您应该能看到 MasterWorker 进程。
  • 如果使用方式二 (YARN),您不会看到 MasterWorker 进程,这是正常的。
  • 无论哪种方式,只要启动了历史服务器,就应该能看到 SparkHistoryServer 进程。

11. 访问Web端测试

  • Spark Master Web UI (仅限Standalone模式): http://localhost:8080/
  • YARN ResourceManager Web UI: http://localhost:8088/ (您可以通过这里查看提交到YARN上的Spark任务)
  • Spark History Server Web UI: http://localhost:18080/

12. 验证集群可用性(提交测试任务)

测试一:提交到 Spark Standalone 集群
(请确保您已通过 $SPARK_HOME/sbin/start-all.sh 启动了独立集群)

1
2
3
4
5
6
7
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://localhost:7077 \
--executor-memory 1g \
--total-executor-cores 2 \
$SPARK_HOME/examples/jars/spark-examples_2.12-3.3.4.jar \
100

测试二:提交到 YARN 集群
(请确保您的YARN已启动,并且您没有启动Spark的 start-all.sh)

1
2
3
4
5
6
7
8
9
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
--executor-memory 1g \
--num-executors 1 \
--executor-cores 2 \
$SPARK_HOME/examples/jars/spark-examples_2.12-3.3.4.jar \
100

注意:提交到YARN时,参数略有不同。我们使用 --master yarn 来指定资源管理器,并用 --num-executors--executor-cores 来控制资源。

看到圆周率π的计算结果输出,即代表您在伪分布式环境上配置Spark成功!