spark编程基础(python版)-- RDD基础

本文对比了Hadoop和Spark在大数据处理中的差异,指出Hadoop的延迟高和不适合实时计算的问题,而Spark通过内存计算和DAG调度机制解决了这些问题。Spark具备运行速度快、易用、通用性强和运行模式多样等优点。文章还详细介绍了Spark的架构,包括RDD、DAG图、Executor和Task的关系。RDD作为Spark的核心,是只读的分区记录集合,通过转换和动作操作实现计算。此外,文章阐述了RDD之间的窄依赖和宽依赖概念,以及Spark如何通过DAG调度优化计算流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Hadoop与spark区别

Hadoop虽然已经成为大数据技术的事实标准,但其本身存在很多缺陷。比如,mapreduce计算模型延迟过高,无法实现实时快速计算的需求,只适用于离线批处理,I/O磁盘开销大。

        spark在借鉴mapreduce优点同时,很好解决了mapreduce存在的缺陷:

        1、spark计算也属于mapreduce计算,但不局限于map和reduce操作;

        2、spark提供内计算,中间结果放入内存,提高迭代运算效率;

        3、基于DAG的任务调度执行机制,优于mapreduce调度机制。

二、优点

1、运行速度快; 2、容易使用; 3、通用性; 4、运行模式多样性。

三、运行框架

        spark Core包含spark最基础、核心功能

        在学习spark之前,我们首先要明白以下名词的意思:

  • RDD:弹性分布式数据集
  • DAG:有向无环图,反映RDD之间的依赖关系
  • Executor:运行在工作节点上的一个进程,负责运行任务,并为应用程序存储数据
  • 应用:
  • 任务:运行在Executor上的工作单元
  • 作业:一个作业包含多个RDD以及作用于相应RDD各种操作
  • 阶段:作业的基本调用单位

四、架构

        spark采用 主从架构,即一个master(driver)和若干个worker构成;

        (1)首先为应用构建起基本的运行环境,即由Driver创建一个SparkContext,进行资源的申请、任务的分配和监控
        (2)资源管理器为Executor分配资源,并启动Executor进程
        (3)SparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAGScheduler解析成Stage,然后把一个个TaskSet提交给底层调度器TaskScheduler处理;Executor向SparkContext申请Task,Task Scheduler将Task发放给Executor运行,并提供应用程序代码
        (4)Task在Executor上运行,把执行结果反馈给TaskScheduler,然后反馈给DAGScheduler,运行完毕后写入数据并释放所有资源

        一个应用由一个driver和若干个作业(worker)组成;

        一个作业由多个阶段构成;

        一个阶段由多个没有shuffle关系的任务构成                

五、 RDD     

        RDD分布式对象集合,本质上是一个只读的分区记录集合,不能直接修改,通过转换得到新的RDD。

        在RDD的执行过程中,真正的计算发生在行动操作中,在前面的所有转换,spark只是记录下转换操作应用的一些基础数据集和RDD生成轨迹,不会触发计算。

        

A、B是两个RDD,转换spark只记录了RDD生成和依赖关系,从而得到DAG图;

动作,生成一个作业,向DAG调度提交作业,触发从起点开始的真正计算。 

        优点:惰性调用、管道化、避免同步等待、不需要保存中间结果、每次操作变得简单、高效的容错性、存放的数据可以是JAVA对象

六、RDD之间的依赖关系——窄依赖和宽依赖

        以是否包含shuffle操作作为判断依据:RDD可以分为宽依赖、窄依赖

        对于窄依赖其父RDD与子RDD之间为一对一、多对一关系;反之,对于宽依赖其父RDD与子RDD之间为一对多关系:

     

         窄依赖可以实现“流水线”优化;但宽依赖包含shuffle操作无法实现“流水线”优化。

        Spark通过分析各个RDD的依赖关系生成了DAG,再通过分析各个RDD中的分区之间的依赖关系来决定如何划分Stage,具体划分方法是:

  • 在DAG中进行反向解析,遇到宽依赖就断开
  • 遇到窄依赖就把当前的RDD加入到Stage中
  • 将窄依赖尽量划分在同一个Stage中,可以实现流水线计算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

v_w50

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值