Standalone 是 Spark 自身提供的一种主从集群部署模式。本文讲述一个常规1主多从的集群部署模式,该模式下master服务依靠Rainbond平台监控保障其可用性,支持从新调度重启。 worker服务能够根据须要伸缩多个节点。html
部署效果截图以下:docker
<center>Rainbond 部署效果图</center>apache
<center>Spark master UI 图</center>缓存
部署步骤
开始前,你须要完成Rainbond平台的安装和搭建,参考Rainbond 安装与部署 本参考文档适合已掌握Rainbond 基础操做的同窗,所以若是你还刚接触Rainbond平台,请先参考 Rainbond 快速入门指南网络
部署单实例的master服务
-
部署spark-master,采用Rainbond基于Docker镜像建立组件:架构
bde2020/spark-master:3.0.1-hadoop3.2
-
确认建立检测成功后选择
高级设置
进行三个特殊设置。分布式-
在环境变量模块中添加环境变量微服务
SPARK_DAEMON_JAVA_OPTS=-Dspark.deploy.recoveryMode=FILESYSTEM -Dspark.deploy.recoveryDirectory=/data
oop咱们须要设置spark-master为“Recovery with Local File System”模式。能够在master发生重启后从持久化文件中恢复数据,保持master服务的可用性。ui
-
在存储设置中添加共享存储
/data
持久化master的数据,使其能够重启后恢复。 -
在端口管理中将 8080端口的对外服务打开,组件启动成功后便可访问master的UI。
-
在部署属性中选择组件类型为
有状态单实例
部署为有状态组件后,其能够得到一个稳定的内部访问域名,供worker组件链接。有状态服务控制权能够保障master节点不会重复启动多个实例。
-
-
设置完成后选择确认建立便可启动master服务。
组件成功点击访问便可打开master UI。如上图所示,咱们能够在UI中获取到master服务的访问地址是:spark://gr7b570e:7077
,注意UI上显示的地址是spark://gr7b570e-0:7077
咱们须要使用的是spark://gr7b570e:7077
,复制并记录这个地址。
注意,地址实际值请查看你的UI显示,这里只是举例说明。
部署多实例的worker实例
-
部署spark-worker,采用基于Docker-run命令建立组件,这种建立方式能够直接设置一些必要属性:
docker run -it -e SPARK_MASTER=spark://gr7b570e:7077 -e SPARK_WORKER_MEMORY=1g bde2020/spark-worker:3.0.1-hadoop3.2
如上建立方式指定了两个环境变量。
- SPARK_MASTER 指定的是master的地址,由上一步建立的组件获取。
- SPARK_WORKER_MEMORY 设置worker单个实例的内存量,这个根据每一个实例分配的内存进行设置便可。好比每一个实例分配1GB, 则设置SPARK_WORKER_MEMORY=1g 。若是不设置此变量,服务会自动读取操做系统的内存量。因为咱们是采用的容器部署方式,读取的值会是宿主机的所有内存。将远大于worker实例实际分配的可用内存值。
- 一样进入高级设置,设置组件部署模式为
有状态多实例
。 - 确认建立组件,启动成功后便可在组件的伸缩页面中设置worker的运行实例数。
到此,咱们的Spark集群已部署完成。
Spark数据读取
-
<b>就近数据处理原则逐步打破</b>
过去咱们更偏心于把数据处理服务(hadoop、yarn等)部署到离数据最近的地方。主要缘由是hadoop计算数据的模式对IO消耗较多,若是数据与计算分类,网络IO带来的消耗将更大,对网络带宽要求较大。
但Spark机制不一样,Spark计算模式是将数据尽量缓存到内存中,也就意味着Spark消耗的资源主要是内存和CPU。而后存储数据的设备内存和CPU配属不必定充足。所以数据与计算分离将是更好的选择。
-
<b>数据与计算分离后的更多选择</b>
数据与计算分离是指计算服务单独部署,存储服务经过网络为计算服务提供数据。经过网络也就意味着能够有多种协议模式可选,除了传统的HDFS,目前经常使用的就是对象存储,好比兼容S3的各种服务,也能够是分布式文件系统,能够根据数据类型和实际须要合理选择。计算服务(spark worker) 能够根据任务的须要灵活的在分布式集群中分配计算资源。
本文讲述的在Rainbond中部署Spark集群便是这种用例。
Master节点主备高可用
Spark 基于 ZooKeeper能够提供master服务的主备切换。 配置方式也比较简单,参考 官方文档。
Rainbond 云原生应用管理平台,实现微服务架构不用改代码,管理 Kubernetes 不用学容器,帮企业实现应用上云,一站式将任何企业应用持续交付到 Kubernetes 集群、混合云、多云等基础设施。是 Rainstore 云原生应用商店的支撑平台。