Spark 简介
Spark 简介
Spark 概述:
- Spark发行与2013年6月,早于Yarn的发行,所以内置一套资源调度框架。
- Spark基于内存进行数据的分析计算,中间过程只要不涉及Shuffle就不会落盘,减少了磁盘IO,所以性能更高。
Spark 内置模块:
- Spark Core :封装了RDD的API,实现Spark基本功能,即任务调度、内存管理、错误恢复、与存储系统交互。
- Spark SQL :是Spark用来操作结构化数据的程序包。
- Spark Streaming :用于实时数据的流式计算,提供了操作数据流的API。
- Spark Mlib :机器学习功能的程序库。
- Spark Graphx :用于图形并行计算和图挖掘系统的组件。
Spark 特点:
- 运行快:基于内存,中间结果不落盘。
- 易用:支持Scala、Python、Java。
- 通用:支持SQL交互查询、流式处理、机器学习、图计算。
- 兼容性强:可以方便和Yarn、Mosos、Kubernetes融合。
Spark 部署模式:
-
单机模式:本地部署单个Spark服务,多用于测试。
说明:本地模式下,默认的调度器为FIFO。
-
集群模式:
-
Standalone :
-
Standalone模式使用Spark自带的资源调动引擎,构建一个由Master和Worker构成的Spark集群,Spark运行在集群中。
-
Master:Spark特有的资源调度系统的leader,掌管整个集群的资源,类似于RM。
-
Worker:Spark特有资源调度系统的slave,掌握单个节点的资源信息,类似NM。
说明:Master和Worker是standalone模式下Spark的守护进程、集群资源管理者,只在standalone模式下才会有。 Spark的资源调度框架是为了自己使用是轻量级的,所以没有必要用Container,效率更高。
-
- 'tandalone-clien': Driver程序运行在本地节点。本地服务通过SparkSubmit提交任务时会在本地启Driver,然后Driver向Master注册Spark应用程序,然后Master会启动相应的Worker分配资源,并在Woker中启动Executor,Executor启动后Driver会向其发送任务,待Executor执行完任务和会向Driver反向注册返回结果。
- 'standalone-cluster':Driver程序运行在集群上的某个节点,本地服务通过SparkSubmit提交任务后不会在本地启动Driver,而是直接向Master注册Spark应用程序,然后Master会向指定的Worker发送启动Driver命令,Worker会启动Driver,Dirver启动后会向Master申请资源,Master收到请求后会指定Worker分配资源,收到请求的Worker会启动Executor,然后Driver会向Executor发送任务,收到任务的Executor执行完任务后会向Driver反向注册并返回结果。
Spark高可用:
- 只有单节点Master时存在单点故障问题,可以通过配置Spark的高可用。配置多个Master注册到Zookeeper并由zookeeper管理,当Active的Master故障后zookeeper会将standby的Master这是为Active的状态,待故障的节点修复好重启后,会变为standby的状态,不会和当前处于Active的Master进行状态的切换。Spark高可用后提交任务是 Master 需要填两个,因为不知道那个是master。
-
-
Yarn :
-
使用YARN组件进行资源调度与任务分配。Spark客户端直接连接Yarn,不需要额外构建Spark集群。
-
ExecutorLauncher:NodeManager上的一个线程,执行的还是AppMaster的main方法,类似封装了AM。
-
ExecutorBackend:NodeManager上的一个进程,里面封装了Executor对象。
-
- 'YarnClient' : Dirver运行在本地。Spark-Submit提交任务后在本地启动Driver,Driver会初始化SC,并对任务进行划分。然后向RM申请启动ExecutorLauncher,RM收到申请后会选择一台NM启动ExecutorLauncher,EL启动后会向RM申请资源,然后EL会在申请到资源的节点上启动ExecutorBackend,EB启动后会创建Executor对象,最后Driver会向Executor发送任务,待Executor任务执行完后会向Driver反向注册返回任务执行结果。
- 'YarnCluster': Driver运行在集群内。通过Spark-Submit提交任务会在本地客户端执行main方法,然后封装并向RM发送指令,RM收到请求后会选择一台NM启动AM,AM内会启动Driver线程执行用户作业,初始化SC,并对任务进行切分。然后Driver向RM申请资源,并向申请到资源的NM启动EB,EB启动后会创建Executor对象然后Driver向Executor分配任务,待Executor执行完任务和向Driver返回计算结果。
注意:1.集群模式下,Driver会和Executor进行内网通信,并且Driver启动在服务器节点比本地节点好。
2.Spark Yarn模式默认使用hadoop集群配置文件。
-
-
Mesos:
- 使用Mesos平台进行资源与任务的调度。
说明:Spark 3.0 还支持跑在 kubernetes(K8S) 上,K8S用来管理docker。
-
Spark 常用端口:
- 4040 Spark正在运行的应用程序的端口号,运行结束看不到,每个spark应用程序会占用一个端口号,再来一个会累加。
- 7077 是 Master 和 Worker的内部通信端口。
- 8032 RM 和 NM 的内部通信端口。
- 8080 Master的默认web配置高可用时需要改,避免和ZK端口冲突。
补充:
- 每个worker 默认启动8个核心数, 每个executor给1g内存。
- SparkContext是SparkCore的程序入口。
- Spark是SparkSQL的程序入口。
- 'spark-submit'用于将jar包上传到集群。
- 'spark-shell'是一个命令工具,本身是一个Application,是一个阻塞式的sparksbumit。
作者:yuexiuping
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.