Spark生态系统目前已经非常成熟了,有很多类型的任务都可以使用spark完成,我们先看下spark生态系统的组成:
spark的核心主要由3个模块组成:
(1)spark core 是spark的最底层的编程实现,定义了许多的函数及方法,是所有spark组件的基础依赖
(2)spark ecosystems 是spark里面的一些高级组件,基本就是我们最常用的框架
(3)resource management 负责spark任务的调度
平时我们开发过程中,基本上使用的都是第二层里面的一些框架,这里面使用最多的莫过于spark sql和spark streaming了。在对spark整个生态系统有一个基本了解后,下面我们就关注的是其运行机制了,只有解了运行机制,才会对我们使用程序,或者排查问题以及性能调优起到很大的帮助。
下面我们看下spark任务的运行机制如下图:
Spark相关一些术语解释:
(一)Driver program
driver就是我们编写的spark应用程序,用来创建sparkcontext或者sparksession,driver会和cluster mananer通信,并分配task到executor上执行
(二)Cluster Manager
负责整个程序的资源调度,目前的主要调度器有:
YARN
Spark Standalone
Mesos
(三)Executors
Executors其实是一个独立的JVM进程,在每个工作节点上会起一个,主要用来执行task,一个executor内,可以同时并行的执行多个task。
(四)Job
Job是用户程序一个完整的处理流程,是逻辑的叫法。
(五)Stage
一个Job可以包含多个Stage,Stage之间是串行的,State的触发是由一些shuffle,reduceBy,save动作产生的
(六)Task
一个Stage可以包含多个task,比如sc.textFile("/xxxx").map().filter(),其中map和filter就分别是一个task。每个task的输出就是下一个task的输出。
(七)Partition
partition是spark里面数据源的一部分,一个完整的数据源会被spark切分成多个partition以方便spark可以发送到多个executor上去并行执行任务。
(八)RDD
RDD是分布式弹性数据集,在spark里面一个数据源就可以看成是一个大的RDD,RDD由多个partition组成,spark加载的数据就会被存在RDD里面,当然在RDD内部其实是切成多个partition了。
那么问题来了一个spark job是如何执行的?
(1)我们写好的spark程序,也称驱动程序,会向Cluster Manager提交一个job
(2)Cluster Manager会检查数据本地行并寻找一个最合适的节点来调度任务
(3)job会被拆分成不同stage,每个stage又会被拆分成多个task
(4)驱动程序发送task到executor上执行任务
(5)驱动程序会跟踪每个task的执行情况,并更新到master node节点上,这一点我们可以在spark master UI上进行查看
(6)job完成,所有节点的数据会被最终再次聚合到master节点上,包含了平均耗时,最大耗时,中位数等等指标。
最后关于spark的并行执行策略在总结下:
首先我们的数据源会被加载到RDD里面,在RDD里面整个数据源会被切分成多个partition,partition的个数实际就是我们执行任务的最大并行度,每个task会负责一个partition的数据,而每个spark任务最大可以执行task的个数=executor的个数 * 每个executor的cores的个数。对应到submit脚本中参数就是:
--num-executors
--executor-cores
根据spark官网的建议每个executor上建议分配置的core的个数应该在3到5之间,如果分配的太多会生成大量的小task执行,task的序列化和传输都会比较耗性能,如果分配的task数量太少,那么我们的executor大部分时候机器资源就会浪费,所以分配的个数一般在3到5个就行,这一点需要注意。
附录:
Spark中RDD,DataFrame,DataSet的区别:
1、RDD支持面向java、scala对象,编译时强类型检查。缺点,序列化非常消耗时间(集群分发和磁盘存储),不能充分利用系统的高级优化能力(如off-heap),垃圾回收对象开销大。
2、DataFrame支持数据集的模式表示(即数据列的概念),所以集群分发数据时并不需要序列化,能充分利用系统高级优化能力(off-heap),引入查询计划提高性能。缺点,DataFrame的列类型,在编译时无法判断类型,会产生运行时错误。
3、Dataset即支持数据集的模式表示,又支持java、scala对象的类型检查能力。两者通过引入一种编码、解码机制来实现。
参考链接:
http://datastrophic.io/core-concepts-architecture-and-internals-of-apache-spark/
https://www.packtpub.com/mapt/book/big_data_and_business_intelligence/9781785885136/1/ch01lvl1sec11/spark-architecture
http://backtobazics.com/big-data/spark/understanding-apache-spark-architecture/
https://www.dezyre.com/article/how-data-partitioning-in-spark-helps-achieve-more-parallelism/297
http://www.agildata.com/apache-spark-rdd-vs-dataframe-vs-dataset/
有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。
- 大小: 21.4 KB
- 大小: 10.3 KB
分享到:
相关推荐
本文将深入探讨Spark的核心思想,并通过源码分析来深化理解。 一、Spark核心思想 1. **弹性分布式数据集(Resilient Distributed Datasets, RDD)**:RDD是Spark的核心数据抽象,它是一种不可变、分区的记录集合,...
DAG调度器会将流作业拆分成一系列的作业(Stage),每个作业由一系列任务(Task)构成,它们在Spark集群中的工作节点上并行运行。 在处理实时数据流时,Spark Streaming通过输入数据源(如Apache Kafka、Amazon ...
书中可能会深入到Spark源码,解析其任务调度、内存管理和数据交换等关键机制,帮助读者理解Spark是如何高效运行的。例如,DAGScheduler如何将作业拆分为任务,以及TaskScheduler如何将任务分配给Executor。 7. **...
这本书不仅覆盖了Spark的基础概念,还深入到了源码层面,为读者揭示了Spark运行机制的内在奥秘。 Spark作为一个快速、通用且可扩展的大数据处理系统,其主要特点在于内存计算,通过在内存中存储数据,减少了传统...
通过对Spark运行原理的深入解析,我们可以更好地理解和利用Spark的强大功能,从而在实际项目中发挥出更大的价值。随着Spark技术的不断发展和完善,未来还将有更多的应用场景等待我们去探索和实现。
理解这些运行机制对于优化Spark应用性能和管理Spark集群至关重要。例如,选择合适的运行模式取决于是否需要快速响应、容错能力以及资源管理的需求。在Yarn模式下,由于Driver运行在AM中,可以在节点失败时重启,而...
《深入理解SPARK2018》是一份专注于Spark技术的深度学习资料,它涵盖了...通过学习这份《深入理解SPARK2018》资料,开发者不仅能掌握Spark的基本用法,还能深入理解其内部机制,从而在大数据处理项目中发挥更大的作用。
《深入理解Spark:核心思想与源码分析》是一本针对大数据处理框架Spark的深度解析教材。这本书涵盖了Spark的全面知识,旨在帮助读者深入理解Spark的核心原理,并通过源码分析提升技术水平。以下是根据书名和描述提炼...
本篇文章将深入探讨Spark的核心思想,并引导你逐步走进Spark的源码世界,揭示其背后的运行机制。 一、Spark的基本架构与核心概念 1. Resilient Distributed Datasets (RDDs):Spark的核心数据抽象,它是不可变、...
为了更好地理解Spark如何高效地进行数据处理,我们需要深入了解其内部的工作原理和运行架构。 #### 二、关键概念解析 **1. Job** - **定义**: 由一系列动作(Action)触发的计算过程,通常包含多个任务(Task),这些...
**Spark运行原理详解** Spark作为一个高效的大数据处理框架,因其快速、通用且可扩展的特性,在大数据领域备受青睐。本文将深入探讨Spark的核心概念、架构设计以及执行过程,旨在帮助那些已经对Spark有一定基础理解...
《深入理解Spark核心思想与源码分析》这本书是Spark技术领域的深度探索,旨在帮助读者全面了解Spark的核心原理和实现机制。Spark作为一个分布式计算框架,以其高效、易用和多模态处理能力在大数据处理领域备受青睐。...
《七个PDF理解Spark》 Spark,作为大数据处理领域的重要框架,以其高效、易用和弹性伸缩性赢得了广泛赞誉。这份由GitHub上的大神JerryLead精心制作的七个PDF系列,深度解析了Spark的核心原理和运行机制,对于学习者...
在GitHub上找到的,国内某大牛JerryLead对spark的理解,生动形象,看完这7个pdf,对spark的运行机制,原理,以及后续性能调优有很大的帮助,这是第二个pdf-Job的物理执行图,详细描述了如何生成Job,提交 job 的实现...
GitHub上某位大牛JerryLead对Spark的理解,大量图示,生动形象,总共7个pdf,看完对spark的原理,运行机制以及后续性能调优有很大的帮助,这是第五个pdf,描述了spark任务部署图,Job的提交,逻辑执行图、物理执行图...
GitHub上某位大牛JerryLead对Spark的理解,大量图示,生动形象,总共7个pdf,看完对spark的原理,运行机制以及后续性能调优有很大的帮助,这是第七个pdf,讲述了broadcast广播的实现原理、使用等
GitHub上某位大牛JerryLead对Spark的理解,大量图示,生动形象,总共7个pdf,看完对spark的原理,运行机制以及后续性能调优有很大的帮助,这是第六个pdf,讲述了cache、checkpoint的实现、使用等常见问题
《深入理解Spark:核心思想与源码分析》是一本针对Apache Spark进行深度解析的专业书籍,旨在帮助读者透彻掌握Spark的核心理念与实现机制。Spark作为大数据处理领域的重要框架,其高性能、易用性和弹性分布式计算的...
### Spark Shuffle机制详解 ...总之,理解Spark Shuffle机制对于优化Spark应用程序至关重要。通过调整配置参数、选择合适的shuffle manager以及合理地使用transformations,可以显著提高应用程序的性能。