标签搜索

目 录CONTENT

文章目录

Spark单机部署和集群部署

陈铭
2023-01-30 / 0 评论 / 0 点赞 / 541 阅读 / 1,177 字 / 正在检测是否收录...

前言

整个Spark集群是建立在之前的Hadoop集群+Hive的基础上的。由于Hive的计算引擎默认是MR,计算效率相对较慢,主要是MR整个过程中有大量的IO操作。我们的目的是,在三节点上部署一个Spark集群部署,让Spark成为代替MR的计算引擎。由于Spark是基于内存的,对虚拟机的内存要求相对更高,但计算效率又是更快的。

单机部署

安装Spark

官网下载编译好的tar包,此处我上传到了hadoop100节点(Hive和NameNode所在节点)的/opt/software

cd /opt/software
tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module
cd /opt/module
mv spark-3.0.0-bin-hadoop3.2 spark-3.0.0

配置环境变量

sudo vim /etc/profile
# 添加上
#SPARK_HOME
export SPARK_HOME=/opt/module/spark-3.0.0
export PATH=$PATH:$SPARK_HOME/bin
export PATH=$PATH:$SPARK_HOME/sbin

source /etc/profile

本地模式启动

# 开启spark的CLI,此时应该可以访问spark的web端,http://hadoop100:8080
spark-shell

# 测试spark的官方样例,web端也可以看到这个任务的运行
# --master local[2],本地环境使用2核资源
# 运行过程中还可以访问http://hadoop100:4040,这个计算任务web端(仅在任务运行过程中才可以访问)
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[2] \
/opt/module/spark-3.0.0/examples/jars/spark-examples_2.12-3.0.0.jar \
10

集群部署

集群模式主要遵循了经典的主从架构,这里将hadoop100作为主节点和工作节点,hadoop101和hadoop102作为工作节点。
鉴于上述已经解压安装好了Spark,后续将从hadoop100节点对Spark的配置文件进行修改,然后分发给其他两个节点。

修改配置

配置slaves

cd /opt/module/spark-3.0.0/conf
mv slaves.template slaves

# 修改 slaves 文件,添加 work 节点
vim slaves
# 添加三个节点的信息
hadoop100
hadoop101
hadoop102

还是在conf文件夹下,配置spark-env.sh

mv spark-env.sh.template spark-env.sh

vim spark-env.sh
# 添加如下信息
# Java的home目录
export JAVA_HOME=/opt/module/jdk1.8.0_212
# Spark主节点的hostname
SPARK_MASTER_HOST=hadoop100
# Spark集群的节点间通讯端口
SPARK_MASTER_PORT=7077
# Yarn的配置文件位置,Spark虽然是计算引擎,但是不擅长进行资源调度,未来集群的任务下发时,调度让Yarn来。
YARN_CONF_DIR=/opt/module/hadoop-3.3.4/etc/hadoop
# Spark历史服务器的配置(web端的端口、历史记录在hdfs存放位置、最多储存最新的30条记录)
export SPARK_HISTORY_OPTS="
-Dspark.history.ui.port=18080
-Dspark.history.fs.logDirectory=hdfs://hadoop100:8020/spark_history_directory
-Dspark.history.retainedApplications=30"

还是在conf文件夹下,配置spark-defaults.conf

mv spark-defaults.conf.template spark-defaults.conf

vim spark-defaults.conf
# 添加如下内容
# 开启Spark的历史服务器
spark.eventLog.enabled           true
# Spark的历史服务器记录保存位置
spark.eventLog.dir               hdfs://hadoop100:8020/spark_history_directory
# Yarn的任务历史重定向到Spark的历史服务器(Spark的计算任务是让Yarn调度的,Yarn也有配置自己的历史服务器,Spark的历史记录就用自己的比较好)
spark.yarn.historyServer.address=hadoop100:18080
spark.history.ui.port=18080

分发文件

xsync /opt/module/spark-3.0.0

启动集群

在主节点启动Spark集群

# 启动集群,/opt/module/spark-3.0.0/sbin/start-all.sh,因为配置了环境变量,所以直接调用了脚本
start-all.sh
# 启动Spark的历史服务器,/opt/module/spark-3.0.0/sbin/start-history-server.sh
start-history-server.sh

此时访问Spark的Web端Spark的历史服务器应该是没问题的

测试任务提交

# 向集群提交任务,资源调度由集群自己负责
# --class 表示要执行程序的主类
# --master spark://linux1:7077 连接到 Spark 集群
# spark-examples_2.12-3.0.0.jar 运行类所在的 jar 包
# 数字 10 表示程序的入口参数,用于设定当前应用的任务数量
# 任务结束后,Spark的web和历史服务器web应该也有任务记录
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop100:7077 \
/opt/module/spark-3.0.0/examples/jars/spark-examples_2.12-3.0.0.jar \
10

# 向集群提交任务,资源调度由Yarn负责
# 任务结束后,除了Spark的web和历史服务器web,Yarn的web应该也有任务记录
# --master yarn 提交到Yarn
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
/opt/module/spark-3.0.0/examples/jars/spark-examples_2.12-3.0.0.jar \
10
0

评论区