Spark常见部署模式:
Local模式:在本地部署单个Spark服务
所谓的Local模式,就是不需要其他任何节点资源就可以在本地执行Spark代码的环境,一般用于教学,调试,演示等。
在IDEA中运行代码的环境称之为开发环境,和Local模式还是有区别的。
Standalone模式:Spark自带的任务调度模式。(国内常用)
YARN模式:Spark使用Hadoop的YARN组件进行资源与任务调度。(国内常用)
Windows模式:为了方便在学习测试spark程序,Spark提供了可以在windows系统下启动本地集群的方式,这样,在不使用虚拟机或服务器的情况下,也能满足Spark的基本使用。
Mesos & K8S模式:(了解)。
Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核,在Twitter得到广泛使用,管理着Twitter超过30,0000台服务器上的应用部署,但是在国内,依然使用着传统的Hadoop大数据框架,所以国内使用Mesos框架的并不多,但是原理都差不多。
容器化部署是目前业界很流行的一项技术,基于Docker镜像运行能够让用户更加方便地对应用进行管理和运维。容器管理工具中最为流行的就是Kubernetes(k8s),而Spark也在最近的版本中支持了k8s部署模式。
1、配置java jdk1.8
环境变量配置路径:电脑→属性→高级系统设置→环境变量
path中加入:%JAVA_HOME%/bin。
注:jdk版本不宜过高。
2、配置scala2.12.0
下载scala安装包,选择对应版本,这里我选择的是scala2.12.0版本。
3、配置scala环境
环境变量配置路径:此电脑→属性→高级系统设置→环境变量
path中加入:%SCALA_HOME%/bin。
验证配置
cmd验证配置:
scala -version
4、配置Hadoop3.1.0
Hadoop下载
从Apache官网下载Hadoop,官网下载速度较慢,也可使用国内镜像下载。
Hadoop环境变量配置,配置步骤同Scala配置。
注意:需要把%HADOOP_HOME%\bin与%HADOOP_HOME%\sbin一同加入path中。
5、配置Spark3.0.3
Spark下载
Spark环境配置,配置步骤同scala配置。
注意:需要把%SPARK_HOME%\bin与%SPARK_HOME%\sbin一同加入path中。
配置验证
cmd命令:
spark-shell
Spark配置成功。
二、spark实战
Spark是用于大规模数据处理的统一分析引擎,也可以说是目前用于可伸缩计算的最广泛的引擎,成千上万的公司包括财富500强中的80%都在使用。
Spark生态系统集成了丰富的数据科学、机器学习、SQL分析和BI、存储和基础设施等框架,并将这个生态使用可以扩展到数千台机器大规模数据使用。
Spark提供了Java、Scala、Python和R的高级api,以及支持通用执行图的优化引擎。
Spark支持一系列丰富的高级工具,包括用于SQL和结构化数据处理的Spark SQL,用于pandas工作负载的Spark上的pandas API,用于机器学习的MLlib,用于图形处理的GraphX,以及用于增量计算和流处理的Structured Streaming。
Spark自身节点运行的集群模式,也就是我们所谓的独立部署(Standalone)模式,Spark的Standalone模式体现了经典的master-slave模式。
# 拷贝一个部署spark-standalone目录
cp -r spark-3.3.0-bin-hadoop3 spark-standalone
# 进入目录
cd spark-standalone/
cd conf
# 准备workers配置文件
mv workers.template workers
# 修改workers内容为
vi workers
hadoop1
hadoop2
hadoop3
# 准备spark-env.sh配置文件
mv spark-env.sh.template spark-env.sh
# spark-env.sh添加如下内容
vi spark-env.s
export JAVA_HOME=/home/commons/jdk8
SPARK_MASTER_HOST=hadoop1
SPARK_MASTER_PORT=7077
# 分发到其他两台上
scp -r /home/commons/spark-standalone hadoop2:/home/commons/
scp -r /home/commons/spark-standalone hadoop3:/home/commons/
# 进入根目录下sbin执行目录和启动
cd sbin/
./start-all.sh
由于spark-shell 停止掉后,集群监控页面就看不到历史任务的运行情况,所以开发时都配置历史服务器记录任务运行情况。
# 先停止前面启动的集群
./stop-all.sh
# 准备spark-defaults.conf
cd ../conf
mv spark-defaults.conf.template spark-defaults.conf
# 修改spark-defaults.conf
vim spark-defaults.conf
spark.eventLog.enabled true
spark.eventLog.dir hdfs://myns:8020/sparkhis
# 需要启动Hadoop集群,HDFS上的目录需要提前存在
hadoop fs -mkdir /sparkhis
# 修改spark-env.sh文件,添加如下配置:
vi spark-env.sh
export SPARK_HISTORY_OPTS="
-Dspark.history.ui.port=18080
-Dspark.history.fs.logDirectory=hdfs://myns:8020/sparkhis
-Dspark.history.retainedApplications=30"
# 参数1含义:WEBUI访问的端口号为18080
# 参数2含义:指定历史服务器日志存储路径(读)
# 参数3含义:指定保存Application历史记录的个数,如果超过这个值,旧的应用程序信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数。
由于hadoop是HA模式因此配置为hdfs-site.xml下的dfs.nameservices的value值
<property>
<name>dfs.nameservices</name>
<value>myns</value> <!--core-site.xml的fs.defaultFS使用该属性值-->
</property>
# 分发配置到另外两台上
scp spark-defaults.conf spark-env.sh hadoop2:/home/commons/spark-standalone/conf/
scp spark-defaults.conf spark-env.sh hadoop3:/home/commons/spark-standalone/conf/
# 启动集群
./start-all.sh
# 启动历史服务
./start-history-server.sh