`
qindongliang1922
  • 浏览: 2146900 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:116311
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:124580
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:58448
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:70345
社区版块
存档分类
最新评论

理解Spark的运行机制

阅读更多
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
0
0
分享到:
评论

相关推荐

    深入理解SparkStreaming执行模型

    深入理解SparkStreaming执行模型,spark研究专家多年的成果总结,值得学习!

    七个pdf理解spark系列_3-JobPhysicalPlan

    在GitHub上找到的,国内某大牛JerryLead对spark的理解,生动形象,看完这7个pdf,对spark的运行机制,原理,以及后续性能调优有很大的帮助,这是第二个pdf-Job的物理执行图,详细描述了如何生成Job,提交 job 的实现...

    七个pdf理解spark系列_5-Architecture

    GitHub上某位大牛JerryLead对Spark的理解,大量图示,生动形象,总共7个pdf,看完对spark的原理,运行机制以及后续性能调优有很大的帮助,这是第五个pdf,描述了spark任务部署图,Job的提交,逻辑执行图、物理执行图...

    七个pdf理解spark系列_7-Broadcast

    GitHub上某位大牛JerryLead对Spark的理解,大量图示,生动形象,总共7个pdf,看完对spark的原理,运行机制以及后续性能调优有很大的帮助,这是第七个pdf,讲述了broadcast广播的实现原理、使用等

    七个pdf理解spark系列_6-CacheAndCheckpoint

    GitHub上某位大牛JerryLead对Spark的理解,大量图示,生动形象,总共7个pdf,看完对spark的原理,运行机制以及后续性能调优有很大的帮助,这是第六个pdf,讲述了cache、checkpoint的实现、使用等常见问题

    七个pdf理解spark系列_4-shuffleDetails

    GitHub上某位大牛JerryLead对Spark的理解,大量图示,生动形象,总共7个pdf,看完对spark的原理,运行机制以及后续性能调优有很大的帮助,这是第四个pdf,描述了shuffle的细节,对比了MapReduce与spark的shuffle过程...

    七个PDF理解Spark

    GitHub上某位大牛JerryLead对Spark的理解,大量图示,生动形象,总共7个pdf,看完对spark的原理,运行机制以及后续性能调优有很大的帮助,压缩包中包含所有的七个PDF。

    图解Spark++核心技术与案例实战

    通过该书的学习,不仅能够更快地定位并排除故障,而且还能够对Spark运行进行调优,让Spark运行更加稳定和快速。 (4) 数据科学家和算法研究 随着大数据技术的发展,实时流计算、机器学习、图计算等领域成为较热的...

    Spark自己的分布式存储系统BlockManager全解析

    BlockManager 是 spark 中至关重要的一个组件,在spark的运行过程中到处都有 BlockManager 的身影,只有搞清楚 BlockManager 的原理和机制,你才能更加深入的理解 spark。

    基于Spark的实践.pptx

    云计算Spark实践参考,包含详细代码和操作步骤: 理解Spark原理 开发Spark程序:开发环境、程序提交、运行模式 内核讲解:RDD 工作机制:任务调度、资源分配

    Apache Spark的设计与实现 PDF中文版

    本文主要讨论 Apache Spark 的设计与实现,重点关注其设计思想、运行原理、实现架构及性能调优,附带讨论与 Hadoop MapReduce 在设计与实现上的区别。不喜欢将该文档称之为“源码分析”,因为本文的主要目的不是去...

    23份大数据岗位求职简历参考模板合集.rar

    1.熟练掌握 SparkSql、SparkStreaming、Spark Core,理解 Spark 工作机制及 Spark 任务的执行流程。 2.熟练掌握 Hadoop 分布式集群安装、部署、搭建和配置,能够熟悉应用 Hadoop 相关工具 进行相关应用开发。 3.熟悉...

    《ApacheSpark设计与实现》.zip

    本文主要讨论 Apache Spark 的设计与实现,重点关注其设计思想、运行原理、实现架构及性能调优,附带讨论与 Hadoop MapReduce 在设计与实现上的区别。不喜欢将该文档称之为“源码分析”,因为本文的主要目的不是...

    大数据中枢平台解决方案.pptx

    数据可视化与展示:提供丰富的数据可视化工具,将分析结果以图表、报告等形式展示给用户,帮助用户更好地理解数据和分析结果。 四、技术实现 数据采集技术:采用Kafka、Flume等流处理技术,实现数据的实时采集和...

    大数据资源体系解决方案.docx

    数据存储与管理:采用分布式存储系统,如Hadoop、Spark等,实现海量数据的高效存储和管理。同时,利用数据仓库和数据湖等技术,对数据进行分类、归档和索引,便于后续的数据分析和挖掘。 二、数据处理与分析 实时...

    企业大数据平台建设方案.pptx

    数据可视化与展示:通过数据可视化技术,将分析结果以图表、报告等形式展示给用户,帮助用户更好地理解数据和分析结果。 三、技术选型与实施 技术选型:根据企业的实际需求和业务场景,选择合适的大数据技术栈,如...

    企业大数据平台建设方案.docx

    数据可视化与展示:通过数据可视化技术,将分析结果以图表、报告等形式展示给用户,帮助用户更好地理解数据和分析结果。 三、技术选型与实施 技术选型:根据企业的实际需求和业务场景,选择合适的大数据技术栈,如...

    大数据中枢平台解决方案.docx

    数据可视化与展示:平台提供丰富的数据可视化工具,将分析结果以图表、报告等形式展示给用户,帮助用户更直观地理解数据和分析结果。 四、技术实现 采用Hadoop、Spark等大数据处理框架,实现数据的分布式处理和高效...

Global site tag (gtag.js) - Google Analytics