一 Spark集群结构
Spark 自身是没有集群管理工具的,但是如果想要管理数以千计台机器的集群,没有一个集群管理工具还不太现实,所以 Spark 可以借助外部的集群工具来进行管理
整个流程就是使用 Spark 的 Client 提交任务,找到集群管理工具申请资源,后将计算任务分发到集群中运行
名词解释
1 Driver
该进程调用 Spark 程序的 main 方法,并且启动 SparkContext
2 Cluster Manager
该进程负责和外部集群工具打交道,申请或释放集群资源
3 Worker
该进程是一个守护进程,负责启动和管理 Executor
4 Executor
该进程是一个JVM虚拟机,负责运行 Spark Task
运行 Spark 程序的步骤
1 启动 Drive, 创建 SparkContext
2 Client 提交程序给 Drive, Drive 向 Cluster Manager 申请集群资源
3 资源申请完毕,在 Worker 中启动 Executor
4 Driver 将程序转化为 Tasks,分发给 Executor 执行
Spark 可以将任务运行在以下两种模式下
1 单机 使用线程模拟并行来运行程序
2 集群 使用集群管理器来和不同类型的集群交互, 将任务运行在集群中
Spark 可以使用的集群管理工具
1 Spark Standalone
2 Hadoop Yarn
3 Apache Mesos
4 Kubernetes
二 搭建Spark集群 (注意:我们搭建的Spark集群要建立的Hadoop集群的基础上)
不会搭建Hadoop集群的参照我之前写的
Spark安装包百度云链接 提取码 beuk
1 将 saprk 安装包上传到虚拟机指定目录 我这里的目录为 /usr/local/apps
2 执行解压 将spark压缩包解压在当前目录下
tar -zxvf spark-2.2.0-bin-hadoop2.7.tgz
3 配置 spark-env.sh
cd spark/conf/
3.2 将 spark-env.sh.template 拷贝一份待改
cp spark-env.sh.template spark-env.sh
3.3 修改 saprk-env.sh 将如下内容贴到 spark-env.sh 文件末尾处 注意:贴入时把中文注释去掉否则有可能会报错
# 指定 Java Home
export JAVA_HOME=/usr/local/apps/jdk1.8
# 指定 Spark Master 地址
export SPARK_MASTER_HOST=mini-01
# 指定端口
export SPARK_MASTER_PORT=7077
最后保存退出即可
4 配置 slave 文件
4.1 首先进入 conf 目录下
cd spark/conf/
4.2 将salves文件拷贝一份待改
cp slaves.template slaves
vim slaves
4.3 将如下代码贴在 salves 文件末尾
mini-02
mini-03
最后保存退出即可
5 配置HistoryServer
5.1 首先进入 conf 目录下
cd spark/conf/
5.2 将spark-defaults.conf.template 拷贝一份待改
cp spark-defaults.conf.template spark-defaults.conf
5.3 将以下内容复制到 spark-defaults.conf 末尾处,通过这段配置,可以指定 spark 将日志输入到 Hdfs 中
spark.eventLog.enabled true
spark.eventLog.dir hdfs://mini-01:8020/spark_log
spark.eventLog.compress true
6 再次配置 spark-env.sh
将以下内容复制到 spark-env.sh 的末尾, 配置 HistoryServer 启动参数,使得 HistoryServer 在启动的时候读取 Hdfs 中写入的 spark 日志
# 指定 Spark History 运行参数
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=4000 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://mini-01:8020/spark_log"
7 为 Spark 创建 HDFS 中的日志目录
hdfs dfs -mkdir -p /spark_log
8 将修改好的Spark包分发到其他机器上
三 启动Spark集群
1 进入 spark master sbin 目录下 即 mini-01
cd /usr/loacl/apps/spark/sbin
2 关闭所有机器的防火墙
systemctl stop firewalld
3 启动 Spark 集群
./start-all.sh
./start-history-server.sh
4 访问 spark 集群
通过浏览器访问 http://192.168.25.193:8080/ (主节点默认端口为8080) 出现如下图所示证明启动成功
5 关闭 spark 集群
进入 spark sbin目录下 执行如下命令即可关闭 spark 集群
./stop-all.sh
以上 感谢 比搭建 hadoop 集群简单多啦!