spark第二篇RDD

spark第二篇RDD

RDD概述
1、什么是RDD
复制代码
RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合.
Dataset:它就是一个集合,可以存储很多的元素。
Distributed:它的数据是分布式存储的,方便后期进行分布式计算。
Resilient:它表示弹性,它表示的含义:RDD中的数据可以保存在内存中或者磁盘中。
2、RDD的五大属性
复制代码
 *  - A list of partitions
 	一个分区列表
 *  - A function for computing each split
 	作用在每一个分区中的函数
 *  - A list of dependencies on other RDDs
     一个RDD会依赖于其他多个RDD,RDD与RDD之间的依赖关系
 *  - Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
      (可选项)针对于KV类型的RDD才会有分区函数Partitioner,并且必须要产生shuffle
 *  - Optionally, a list of preferred locations to compute each split on (e.g. block locations for
 *    an HDFS file)
       (可选项) 数据的本地性和数据块位置最优
创建RDD
  • 1、通过sc.parallelize,需要一个已经存在scala集合,来生成一个RDD
    • val rdd1=sc.parallelize(List(1,2,3,4))
  • 2、读取外部数据源
    • val rdd2=sc.textFile("/words.txt")
  • 3、在已有RDD的基础上操作对应的算子生成新的rdd
    • val rdd3=rdd2.flatMap(_.split(" "))
RDD的算子分类
1、Transformation(转换)
  • 一个rdd转换之后生成新的RDD,并不会立即执行,得到结果,RDD中的所有转换都是延迟加载的 ,而是记录下当前rdd的一系列操作。
2、Action(动作)
  • 会触发任务的真正运行
RDD的依赖关系
  • 1、宽依赖

    复制代码
    窄依赖指的是每一个父RDD的Partition最多被子RDD的一个Partition使用
    总结:窄依赖我们形象的比喻为独生子女
  • 2、窄依赖

    复制代码
    宽依赖指的是多个子RDD的Partition会依赖同一个父RDD的Partition
    总结:宽依赖我们形象的比喻为超生 
血统
复制代码
RDD的Lineage会记录RDD的元数据信息和转换行为,当该RDD的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区。
RDD的缓存

可以把rdd保存在内存或者磁盘,避免下次使用的时候,重头在来计算得到。可以通过调用rdd的cache和persist方法进行缓存设置

1、cache
  • 它是一个transformation操作,对RDD进行缓存,它不会立即执行,而是触发了action算子操作的时候才会缓存数据,后面如果用到了,该份数据,不需要在重复计算得到,调用cache的时候,其本质是调用了persist方法默认是存放在内存中的,persist(StorageLevel.MEMOEY_ONLY)
2、persist
  • 可以选择不同缓存级别来缓存数据
3 、使用说明
  • 都需要触发action算子操作,才会触发缓存执行
DAG有向无环图
1 什么是DAG
  • DAG(Directed Acyclic Graph)叫做有向无环图,原始的RDD通过一系列的转换就形成了DAG,根据RDD之间依赖关系的不同将DAG划分成不同的Stage(调度阶段)。
2 划分stage
  • 1、从最后一个rdd开始往前推,把当前rdd加入到一个stage中,它是最后一个stage。
  • 2、遇到窄依赖就把这个rdd加入到本stage中,遇到宽依赖就从宽依赖切开,最后一个stage就结束了。
  • 3、然后重新分配一个stage, 按照上面的规则继续向前推,直到最开始的那个rdd,整个划分stage就结束了。
3 stage内部
  • 每个stage里面都有一组task, 被保存在taskSet集合中,可以被并行的计算。
  • stage与stage之间也存在依赖关系,后面的stage会依赖于前面stage产生的结果,只有前面的stage计算完成后才能运行后面的stage。
checkpoint机制
  • 会对数据进行一个持久化操作,保存在hdfs
  • 使用的时候:
    • 需要sc.setCheckpointdir 来设置一个检查点目录
    • 对需要缓存的rdd调用checkpoint
    • 注意:同样在执行数据缓存的时候,需要有对应的action算子操作,才会真正触发持久化操作。
  • 在做checkpoint操作的时候,此时会先执行对应触发action算子的rdd结果,计算完成之后又会开辟一个新的job来计算设置了checkpoint的rdd的结果。
  • 在设置了checkpoint之后,RDD的lineage就改变了。
  • 数据恢复的一般顺序
    • 先从内存查找,如果设置了缓存,直接从缓存中获取得到,如果没有就从checkpoint中查找,如果也没有,这个时候只能够重新计算得到。
spark的运行架构

task并行运行个数与线程数量有关,与核数无关

相关推荐
历程里程碑7 分钟前
2. Git版本回退全攻略:轻松掌握代码时光机
大数据·c++·git·elasticsearch·搜索引擎·github·全文检索
面向Google编程12 分钟前
从零学习Kafka:ZooKeeper vs KRaft
大数据·kafka
热爱专研AI的学妹1 小时前
Seedance 2.0(即梦 2.0)深度解析:AI 视频正式迈入导演级精准可控时代
大数据·人工智能·阿里云·音视频
切糕师学AI2 小时前
HBase:一文搞懂分布式宽列数据库(原理 + 架构 + 实战)
数据库·分布式·nosql·hbase·分布式宽列数据库·wide column db
lcj09246662 小时前
磁控U位管理系统与DCIM对接实现:筑牢数据中心精细化运维底座
大数据·数据库·人工智能
饭后一颗花生米4 小时前
Git冷命令拯救崩溃现场
大数据·elasticsearch·搜索引擎
福老板的生意经8 小时前
从成本失控到ROI翻倍:企业数字化营销投放的落地路径与工具选型指南
大数据·运维·人工智能
@insist1238 小时前
网络工程师-实战配置篇(二):精通 ACL 与策略路由,实现智能流量管控
大数据·网络·网络工程师·软考·软件水平考试
互联网科技看点8 小时前
以青春种黄芪 用科技兴乡村
大数据·人工智能·科技
2501_933670799 小时前
2026大学生必看!互联网行业含金量最高
大数据