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并行运行个数与线程数量有关,与核数无关

相关推荐
外域速览31 分钟前
智谱50亿美元押注AI自训练
大数据·人工智能
人工智能培训36 分钟前
孪生不止在工厂:能源、医疗与农业
大数据·人工智能
QYRdata1 小时前
隐私合规技术迎来拐点:数据主体请求自动化年复合增长率14.0%(2026-2032)
大数据·服务发现
拼图2093 小时前
Git常用语法
分布式·git·学习
Elastic 中国社区官方博客4 小时前
列式存储并不等同于列式数据库。Columnar 模式为 Elasticsearch 带来了什么
大数据·运维·数据库·elasticsearch·搜索引擎
weixin199701080164 小时前
[特殊字符]️《二手ERP对接电商平台的总体方案:统一数据模型 + 事件驱动 + 灰度上线6原则》(附Python源码)
大数据·python
大大大大晴天5 小时前
从元数据到数据地图:企业数据治理的第一块地基
大数据
科创致远5 小时前
科创致远 eSOP 电子作业指导书系统落地应用指南
大数据·人工智能·汽车·制造·精益工程
人丰6 小时前
AI不是空中楼阁:制造企业智能化转型的底座建设方法论
大数据·人工智能·制造
科创致远7 小时前
成都显示模组场景观察|看板、ESOP、MES,该不该合成一块屏
大数据·人工智能·制造