一、Local 环境
本地模式,即不需要其他任何节点资源就可以在本地执行 Spark 代码的环境;区别于 IDEA 开发时的 local 环境
1. 搭建
-
Spark 下载地址:https://spark.apache.org/downloads.html
-
下载
spark-3.0.0-bin-hadoop3.2.tgz
安装包并上传到虚拟机上的/opt/software
目录 -
将
spark-3.0.0-bin-hadoop3.2.tgz
解压缩到/opt/module
并修改名称tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module cd /opt/module mv spark-3.0.0-bin-hadoop3.2.tgz spark-local
-
进入
spark-local
目录执行bin/spark-shell
检查是否搭建成功cd /opt/module/spark-local bin/spark-shell
-
查看 Web 监控页面:
http://hadoop102:4040
2. 操作
-
命令行工具:
bin/spark-shell# 进入 scala 命令工具 sc.textFile("data/word.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect().foreach(println)
-
提交应用:
bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master local[2] \ ./examples/jars/spark-examples_2.12-3.0.0.jar \ 10
bin/spark-submit
表示提交命令--class
表示要执行程序的主类--master local[2]
表示部署模式,默认为本地模式,数字表示分配的虚拟 CPU 核数量spark-examples_2.12-3.0.0.jar
表示运行的应用类所在的 jar 包10
表示程序的入口参数,用于设定当前应用的任务数量
二、Standalone 环境
独立部署模式,只使用 Spark 自身节点运行的集群模式,分为 master 和 workers
1. 集群规划
Spark | Hadoop102 | Hadoop103 | Hadoop104 |
---|---|---|---|
master | √ | ||
worker | √ | √ | √ |
2. 搭建
-
下载
spark-3.0.0-bin-hadoop3.2.tgz
安装包并上传到虚拟机上的/opt/software
目录 -
将
spark-3.0.0-bin-hadoop3.2.tgz
解压缩到/opt/module
并修改名称tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module cd /opt/module mv spark-3.0.0-bin-hadoop3.2.tgz spark-standalone
-
修改配置文件
# 1.进入 spark-standalone 的 conf 目录,将 slaves.template 文件更名为 slaves cd /opt/module/spark-standalone/conf mv slaves.template slaves# 2.在 slaves 文件中添加 worker 节点 hadoop102 hadoop103 hadoop104# 3.将 spark-env.sh.template 文件更名为 spark-env.sh mv spark-env.sh.template spark-env.sh# 4.在 spark-env.sh 文件中添加 JAVA_HOME 环境变量和集群对应的 master 节点 export JAVA_HOME=/opt/module/jdk1.8.0_212 SPARK_MASTER_HOST=hadoop102 SPARK_MASTER_PORT=7077 #注意:7077 端口,相当于 hadoop3 内部通信的 8020 端口,此处的端口需要确认自己的 Hadoop 配置# 5.分发 spark-standalone 目录到其他集群节点 xsync spark-standalone
-
启动集群
# 在 hadoop102 的 spark-standalone 目录 cd /opt/module/spark-standalone sbin/start-all.sh# 查看进程 jps
-
查看 Web 监控页面:
http://hadoop102:8080
3. 测试
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop102:7077 \
./examples/jars/spark-examples_2.12-3.0.0.jar \
10
参数 | 说明 | 示例 |
---|---|---|
–class | Spark 程序中包含主函数的类 | |
–master | Spark 程序运行的模式(环境) | local[*]、spark://hadoop102:7077、Yarn |
–executor-memory 1G | 指定每个 executor 可用内存为 1G | 符合集群内存配置即可,具体情况具体分析 |
–total-executor-cores 2 | 指定所有 executor 使用的 cpu 核数为 2 个 | |
–executor-cores | 指定每个 executor 使用的 cpu 核数 | |
application-jar | 打包好的应用 jar,包含依赖。这个 URL 在集群中全局可见。 比如 hdfs://共享存储系统,如果是 file://path ,那么所有的节点的 path 都包含同样的 jar | |
application-arguments | 传给 main()方法的参数 |
4. 配置历史服务
-
修改并添加配置
# 1.将 spark-defaults.conf.template 文件更名为 spark-defaults.conf cd /opt/module/spark-standalone/conf mv spark-defaults.conf.template spark-defaults.conf# 2.在 spark-default.conf 文件中配置日志存储路径 spark.eventLog.enabled true spark.eventLog.dir hdfs://hadoop102:8020/directory # 注意:需要启动 hadoop 集群,HDFS 上的 directory 目录需要提前存在# 3.在 spark-env.sh 文件中添加日志配置 export SPARK_HISTORY_OPTS=" -Dspark.history.ui.port=18080 # WEB UI 访问的端口号为 18080 -Dspark.history.fs.logDirectory=hdfs://hadoop102:8020/directory #历史服务器日志存储路径 -Dspark.history.retainedApplications=30" # 指定保存 Application 历史记录的个数,如果超过这个值,旧的应用程序信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数# 4.分发配置文件(xsync 为自定义分发脚本,详见“Hadoop生产环境集群搭建”文章) xsync conf/
-
启动 Hadoop 集群并创建日志存储目录
cd /opt/module/hadoop-3.1.3 sbin/start-dfs.sh hadoop fs -mkdir /directory
-
启动 Spark 集群和历史服务
cd /opt/module/spark-standalone sbin/start-all.sh sbin/start-history-server.sh
-
提交应用执行
bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master spark://hadoop102:7077 \ ./examples/jars/spark-examples_2.12-3.0.0.jar \ 10
-
查看历史服务:
http://hadoop102:18080
5. 配置高可用
5.1 集群规划
规划 | Hadoop102 | Hadoop103 | Hadoop104 |
---|---|---|---|
master | √ | √ | |
worker | √ | √ | √ |
zookeeper | √ | √ | √ |
5.2 搭建
-
修改
spark-env.sh
文件配置内容cd /opt/module/spark-standalone/conf vim spark-env.sh#1.注释如下内容: #SPARK_MASTER_HOST=hadoop102 #SPARK_MASTER_PORT=7077#2.添加如下内容: #修改 Master 监控页面默认访问端口 8080 为 8989,避免和 Zookeeper 冲突 SPARK_MASTER_WEBUI_PORT=8989#Zookeeper配置信息 export SPARK_DAEMON_JAVA_OPTS=" -Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hadoop102,hadoop103,hadoop104 -Dspark.deploy.zookeeper.dir=/spark"
-
分发配置:
xsync conf/
-
启动 Zookeeper 集群
-
启动 Spark 集群;在 hadoop103 上启动 master 服务
#hadoop102 cd /opt/module/spark-standalone sbin/start-all.sh#hadoop103 cd /opt/module/spark-standalone sbin/start-master.sh
-
分别查看 hadoop102 和 hadoop103 的 Web 页面:
https:://hadoop102:8989
和https:://hadoop103:8989
-
提交应用执行
bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master spark://hadoop102:7077,hadoop103:7077 \ ./examples/jars/spark-examples_2.12-3.0.0.jar \ 10
-
模拟 master 下线,保证高可用
#停止 hadoop102 的 master 进程 jps kill -9 [pid]#分别访问 web 页面查看状态:https:://hadoop102:8989 和 https:://hadoop103:8989
三、Yarn 模式
由于 Spark 主要是计算框架,而不是资源调度框架,所以本身提供的资源调度并不是它的强项,因此在生产上多集成 Yarn 使用
1. 搭建
-
下载
spark-3.0.0-bin-hadoop3.2.tgz
安装包并上传到虚拟机上的/opt/software
目录 -
将
spark-3.0.0-bin-hadoop3.2.tgz
解压缩到/opt/module
并修改名称tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module cd /opt/module mv spark-3.0.0-bin-hadoop3.2.tgz spark-yarn
-
修改 hadoop 安装目录下的
etc/hadoop/yarn-site.xml
配置文件并分发到集群其他节点<!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认 是 true --> <property><name>yarn.nodemanager.pmem-check-enabled</name><value>false</value> </property> <!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认 是 true --> <property><name>yarn.nodemanager.vmem-check-enabled</name><value>false</value> </property>
-
修改 Spark 配置文件
cd /opt/module/spark-yarn/conf#1.将 spark-env.sh.template 文件更名为 spark-env.sh mv spark-env.sh.template spark-env.sh vim spark-env.sh#2.在 spark-env.sh 文件中添加 JAVA_HOME 和 YARN_CONF_DIR 配置 export JAVA_HOME=/opt/module/jdk1.8.0_212 YARN_CONF_DIR=/opt/module/hadoop/etc/hadoop
-
启动 Hadoop 集群
2. 测试
-
以集群方式提交应用:不会打印结果
bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master yarn \ --deploy-mode cluster \ ./examples/jars/spark-examples_2.12-3.0.0.jar \ 10
-
以客户端方式提交应用:
bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master yarn \ --deploy-mode client \ ./examples/jars/spark-examples_2.12-3.0.0.jar \ 10
3. 配置历史服务
-
修改 Spark 配置
cd /opt/module/spark-yarn/conf#1.将 spark-defaults.conf.template 文件更名为 spark-defaults.conf mv spark-defaults.conf.template spark-defaults.conf vim spark-defaults.conf#2.在 spark-defaults.conf 文件中配置日志存储路径和 yarn 历史服务器信息 spark.eventLog.enabled true spark.eventLog.dir hdfs://hadoop102:8020/directory #注意:需要启动 hadoop 集群,HDFS 上的目录需要提前存在 spark.yarn.historyServer.address=hadoop102:18080 spark.history.ui.port=18080#3.在 spark-env.sh 文件中添加日志配置 export SPARK_HISTORY_OPTS=" -Dspark.history.ui.port=18080 -Dspark.history.fs.logDirectory=hdfs://hadoop02:8020/directory -Dspark.history.retainedApplications=30"
-
启动历史服务:
sbin/start-history-server.sh
-
提交应用执行并查看历史服务:
https://hadoop103:8088
四、其他模式简介
-
K8S&Mesos 模式:
https://spark.apache.org/docs/latest/running-on-kubernetes.html
- Mesos 是 Apache 下的开源分布式资源管理框架
- Kubernetes(k8s)是目前最为流行的容器管理工具
-
Windows 模式:
-
将
spark-3.0.0-bin-hadoop3.2.tgz
解压缩到无中文无空格的路径中 -
执行解压缩文件路径下
bin
目录中的spark-shell.cmd
文件,启动 Spark 本地环境 -
编写 Scala 程序执行或在 DOS 命令行窗口中执行提交指令
spark-submit --class org.apache.spark.examples.SparkPi --master local[2] ../examples/jars/spark-examples_2.12-3.0.0.jar 10
-
六、各模式对比
模式 | Spark安装机器数 | 需启动的进程 | 所属者 | 应用场景 |
---|---|---|---|---|
Local | 1 | 无 | Spark | 测试 |
Standalone | 3 | Master及Worker | Spark | 单独部署 |
Yarn | 1 | Yarn及HDFS | Hadoop | 混合部署 |
七、常用端口号说明
服务 | 端口 |
---|---|
Spark 查看当前 Spark-shell 运行任务情况端口号(计算) | 4040 |
Spark Master 内部通信服务 | 7077 |
Standalone 模式下,Spark Master Web 端口号(资源) | 8080 |
Spark 历史服务器 | 18080 |
Hadoop YARN 任务运行情况查看 | 8088 |