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

相关推荐
写代码的【黑咖啡】10 分钟前
大数据环境下如何维护模型文档:策略与实践
大数据
焦糖玛奇朵婷13 分钟前
扭蛋机小程序:线上扭蛋机模式发展新形势[特殊字符]
大数据·数据库·程序人生·小程序·软件需求
番茄撒旦在上21 分钟前
什么样的表适合做拉链表
大数据·数据仓库·hive
Elastic 中国社区官方博客38 分钟前
在 Kibana 中可视化你的 Bosch Smart Home 数据
大数据·运维·elasticsearch·搜索引擎·信息可视化·全文检索·kibana
云老大TG:@yunlaoda3601 小时前
如何使用华为云国际站代理商的FunctionGraph进行事件驱动的应用开发?
大数据·数据库·华为云·云计算
yiersansiwu123d1 小时前
生成式AI重构内容生态,人机协同定义创作新范式
大数据·人工智能·重构
老蒋新思维1 小时前
创客匠人:从个人IP到知识变现,如何构建可持续的内容生态?
大数据·网络·人工智能·网络协议·tcp/ip·创客匠人·知识变现
Sui_Network1 小时前
Mysten Labs 与不丹王国政府的创新与技术部携手探索离线区块链
大数据·人工智能·web3·去中心化·区块链
互联科技报1 小时前
GEO优化工具、AI搜索引擎优化软件平台实测报告:四大平台深度体验与选型指南
大数据·人工智能·搜索引擎
‘胶己人’2 小时前
redis分布式锁
数据库·redis·分布式