Spark RDD深入理解

RDD 深入理解

  • 当由大批量数据需计算时,则需放入集群中进行并行处理

  • 解决并行计算的四个要点

    • 要解决的问题必须可以分解为多个可以并发计算的部分
    • 每个部分要可以在不同处理器上被同时执行
    • 需要一个共享内存的机制
    • 需要一个总体上的协作机制来进行调度
  • 任务分解

    • hdfs中,分为不同block
    • 进行计算的时候,可按照block来划分,每一个block对应一个不同的计算单元
    • RDD 并没有真实的存放数据, 数据是从 HDFS 中读取的, 在计算的过程中读取即可
    • RDD 分片的意义在于表示对源数据集每个分片的计算, RDD 可以分片也意味着 可以并行计算
  • 移动数据不如移动计算

    • 每个计算单元需要记录其存储单元的位置,尽量调度过去。
  • 集群RDD错误恢复

    • 缓存,类似HDFS的备份
    • 记录RDD依赖关系,通过其父级RDD来恢复子级RDD
      • 记录子级的父级关系
      • 记录子级的计算函数,
      • 当子集RDD出错时,可通过父级RDD和计算函数来恢复子级RDD
  • 复杂RDD间依赖优化

    • 缓存
    • checkpoint

RDD在计算过程中是共享内存的,而不需要将中间结果存放在可靠的分布式文件系统中。

(Spark 分区/分片)

RDD 特点

  • RDD 不仅是数据集,也是编程模型

    • RDD 即是一种数据结构, 同时也提供了上层 API, 同时 RDD 的 API 和 Scala 中对集合运算的 API 非常类似, 同样也都是各种算子
    • RDD 的算子大致分为两类
      • Transformation 转换操作, 例如 map flatMap filter
      • Action 动作操作, 例如 reduce collect show

    执行 RDD 的时候, 在执行到转换操作的时候, 并不会立刻执行, 直到遇见了 Action 操作, 才会触发真正的执行, 这个特点叫做 惰性求值

  • RDD可以分区

    • RDD 是一个分布式计算框架, 所以, 一定是要能够进行分区计算的, 只有分区了, 才能利用集群的并行计算能力。
    • 同时, RDD 不需要始终被具体化, 也就是说: RDD 中可以没有数据, 只要有足够的信息知道自己是从谁计算得来的就可以, 这是一种非常高效的容错方式。
  • RDD是只读的

    • RDD 是只读的, 不允许任何形式的修改. 虽说不能因为 RDD 和 HDFS 是只读的, 就认为分布式存储系统必须设计为只读的. 但是设计为只读的, 会显著降低问题的复杂度, 因为 RDD 需要可以容错, 可以惰性求值, 可以移动计算, 所以很难支持修改.
  • RDD是可以容错的

    • RDD 的容错有两种方式
      • 保存 RDD 之间的依赖关系, 以及计算函数, 出现错误重新计算
      • 直接将 RDD 的数据存放在外部存储系统, 出现错误直接读取, Checkpoint
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值