news 2026/7/28 11:36:05

深入理解Spark

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深入理解Spark

文章目录

        • 1、Spark 是什么?
        • 2、Spark 运行模式
        • 3、适合Spark的场景
        • 4、Spark相关术语
        • 5、Spark程序执行流程
        • 6、理解Spark Stage的划分
          • 6.1 Spark Stage的划分
          • 6.2 Spark DAG的可视化
        • 7、Spark调度过程
          • 7.1 Spark的两级调度模型
          • 7.2 以Spark On Yarn说明调度过程
        • 小结

在前面博客文章里,已经把大数据实时分析项目在spark组件之前的各个组件原理、部署和测试都给出相关讨论,接下来是项目最核心的内容:实时计算部分,因为项目将使用spark streaming做微批计算(准实时计算),因此接下的文章内容将深入spark以及spark streaming架构原理,为后面实际计算编程做铺垫。
1、Spark 是什么?

Spark是一种分布式的并行计算框架,什么是计算框架?所谓的计算(在数据层面理解)其实是用于数据处理和分析的一套解决方案,例如Python的Pandas,相信用过Pandas都很容易理解Pandas擅长做什么,加载数据、对数据进行各类加工、分析数据等,只不过Pandas只适合在单机上的、数据量百万到千万级的计算组件,而Spark则是分布式的、超大型多节点可并行处理数据的计算组件。

Spark通常会跟MapReduce做对比,它与MapReduce 的最大不同之处在于Spark是基于内存的迭代式计算——Spark的Job处理的中间(排序和shuffling)输出结果可以保存在内存中,而不是在HDFS磁盘上反复IO浪费时间。除此之外,一个MapReduce 在计算过程中只有Map 和Reduce 两个阶段。而在Spark的计算模型中,它会根据rdd依赖关系预选设计出DAG计算图,把job分为n个计算阶段(Stage),因为它内存迭代式的,在处理完一个阶段以后,可以继续往下处理很多个阶段,而不只是两个阶段。
Spark提供了超过80种不同的Transformation和Action算子,如map,reduce,filter,reduceByKey,groupByKey,sortByKey,foreach等,并且采用函数式编程风格,实现相同的功能需要的代码量极大缩小(尤其用Scala和Python写计算业务代码方面)。正是基于使用易用性,因此Spark能更好地用于基于分布式大数据的数据挖掘与机器学习等需要迭代的MapReduce的算法。Spark生态如下:

2、Spark 运行模式

目前最为常用的Spark运行模式有:

  • Local:本地进程运行,例如启动一个pyspark交互式shell,一般用于开发调试Spark应用程序
  • Standalone:利用Spark自带的资源管理与调度器运行Spark集群,采用Master/Slave结构,可引入ZooKeeper实现spark集群HA
  • Hadoop YARN : 集群运行在YARN资源管理器上,资源管理交给YARN,Spark只负责进行任务调度和计算,参考本博客《基于YARN HA集群的Spark HA集群》
  • Apache Mesos :Apache Mesos abstracts CPU, memory, storage, and other compute resources away from machines (physical or virtual), enabling fault-tolerant and elastic distributed systems to easily be built and run effectively.
    将计算、内存、存储以及其他计算资源抽象出来,使得那些分布式系统更容易被构建以及更高效的被执行。其实就是跟YARN一样,做资源管理。
    Mesos和YARN两种资源有什么区别:
    之前看一个视频,对其给出的解释印象深刻:
    Mesos:细腻度资源管控
    YARN:粗粒度资源管控
    例如有个老师要给45个学生上课,向教务处申请课室资源,若教务处以Mesos模式发放资源,那么它会发放只能容纳45个学生的课室,典型的按需分配;若教务处以YARN模式发放资源,那么它会发放能容200个学生的大教室,但实际上还有155个人位置资源空闲。这就是资源的细腻度和粗粒度的区别。
3、适合Spark的场景
  • Spark适用场景:
    Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合,基于大数据的机器学习再适合不过,例如梯度下降法,需要不断迭代找到全局或局部最优解。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小。
    准实时计算场合:实时接收用户行为原始数据,并通过Spark Streaming计算(转换+加工),例如在广告、报表、推荐系统等业务上,在广告业务方面需要大数据做应用分析、效果分析、定向优化等,在推荐系统方面则需要大数据优化相关排名、个性化推荐以及热点点击分析等,这些业务天生适合大型的互联网巨头。

  • Spark不适用场景:

    内存消耗极大,在内存不足的情况下,Spark会下放到磁盘,会降低应有的性能
    有高实时性要求的流式计算业务,例如实时性要求毫秒级,对每一条数据都触发实时计算的,这种场合已经被Flink称霸。
    流线长或文件流量非常大的数据集不适合,这是因为这种场合rdd消耗极大的内存集群压力大时,一旦一个task失败会导致它前面一条线所有的前置任务全部重跑(尤其对于RDD 血缘关系链长且有多个宽依赖的情况),JVM的GC不够及时,内存不能及时释放,将会出现恶性循环导致更多的task失败,导致整个Application效率极低。所以为什么说Spark是适合“微批”处理,意味着每隔一段时间(1秒或者几秒不等)来一批次数据,Spark适合“一小口一小口准实时地吃数据”。

4、Spark相关术语
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/28 11:36:00

QueryExcel:3分钟批量搜索上百个Excel文件的终极免费解决方案

QueryExcel:3分钟批量搜索上百个Excel文件的终极免费解决方案 【免费下载链接】QueryExcel 多Excel文件内容查询工具。 项目地址: https://gitcode.com/gh_mirrors/qu/QueryExcel 还在为海量Excel数据查询而烦恼吗?想象一下这样的场景&#xff1a…

作者头像 李华
网站建设 2026/7/28 11:34:28

计算机毕业设计之基于SpringBoot的高校课程管理系统的设计与实现

随着信息技术的飞速发展和高等教育改革的不断深入,高校课程管理系统应运而生。在传统的教学管理模式中,课程管理往往依赖于人工操作,存在信息更新不及时、管理效率低下、数据易出错等问题。同时,随着学生数量的增加和课程种类的多…

作者头像 李华
网站建设 2026/7/28 11:33:41

德州仪器TPIC7710 EVM评估指南:从芯片验证到汽车电机驱动系统设计

1. 项目概述:从芯片到系统,电子驻车制动ASIC的评估之道 在汽车电子和工业电机驱动领域,一颗芯片从数据手册上的参数变成实际系统中稳定可靠的“心脏”,中间往往隔着一条名为“评估验证”的鸿沟。尤其是对于像德州仪器(…

作者头像 李华
网站建设 2026/7/28 11:33:24

开源大模型实测指南:从入门到生产部署的关键步骤

这类关于开源模型的观点讨论,最值得先看的不是谁赞同了谁,而是这些观点背后指向的实际问题:开源模型到底发展到了什么阶段?普通开发者现在能用它做什么?以及,如果要上手,最该从哪里开始验证&…

作者头像 李华
网站建设 2026/7/28 11:33:24

物联网设备低功耗设计:从芯片选型到软件优化

1. 项目背景与核心挑战在物联网终端设备设计中,如何最大化初级电池(不可充电电池)的使用寿命一直是个棘手的工程难题。我最近完成的一个野外气象监测项目就遇到了这个痛点——设备需要部署在无人区连续工作5年以上,而传统方案下的…

作者头像 李华
网站建设 2026/7/28 11:33:06

NBM7100A与STM32F722VE的低功耗物联网设备优化方案

1. 项目背景与核心挑战在物联网设备井喷式发展的今天,一个长期被忽视的问题正逐渐浮出水面——那些依赖不可充电初级电池(如CR2032纽扣电池)的终端设备,其续航能力正成为制约大规模部署的关键瓶颈。我曾参与过一个农业传感器网络项…

作者头像 李华