• 【二】Spark 核心


    spark 核心

    spark core

    RDD创建 >>> RDD转换 >>> RDD缓存 >>> RDD行动 >>> RDD输出

    RDD[Resilient Distributed Dataset]

    它是一个弹性分布式数据集,具有良好的通用性、容错性与并行处理数据的能力,为用户屏蔽了底层对数据的复杂抽象和处理,为用户提供了一组方便的数据转换与求值方法。

    • 弹性

      • 存储弹性:n内存与磁盘d额自动切换
      • 容错弹性:数据丢失可以自动恢复
      • j计算的弹性:计算出错重试机制
      • 分片弹性:根据需要重新分片
    • 容错

      • 通常在不同机器上备份数据或者记录数据更新的方式完成容错,但这种对任务密集型任务代价很高

      • RDD采用数据应用变换(map,filter,join),若部分数据丢失,RDD拥有足够的信息得知这部分数据是如何计算得到的,可通过重新计算来得到丢失的数据

      • 这种恢复数据方法很快,无需大量数据复制操作,可以认为Spark是基于RDD模型的系统

    • 懒操作

      • 延迟计算,action的时候才操作
    • 瞬时性

      • 用时才产生,用完就释放

    Spark允许从以下四个方面构建RDD

    • 从共享文件系统中获取,如从HDFS中读数据构建RDD
    val RDD = sc.textFile(“/xxx/yyy/file”)
    
    • 通过现有RDD转换得到
    val RDD = a.map(x => (x, 1))
    
    • 定义一个scala数组
    val RDD = sc.parallelize(1 to 10, 1)
    
    • 有一个已经存在的RDD通过持久化操作生成
    val RDD = a.persist(), a. saveAsHadoopFile(“/xxx/yyy/zzz”)
    

    Spark针对RDD提供两类操作:transformations和action

    • transformations是RDD之间的变换,action会对数据执行一定的操作

    • transformations采用懒策略,仅在对相关RDD进行action提交时才触发计算

    每个RDD包含了数据分块/分区(partition)的集合,每个partition是不可分割的

    • 实际数据块的描述(实际数据到底存在哪,或者不存在)

    • 其值依赖于哪些partition

    与父RDD的依赖关系(rddA=>rddB)

    • 宽依赖:B的每个partition依赖于A的所有partition

      • 比如groupByKey、 reduceByKey、 join……,由A产生B时会先对A做shuffle分桶
    • 窄依赖: B的每个partition依赖于A的常数个partition

      • 比如map、 filter、 union……

    RDD 依赖关系

    窄依赖

    每一个父RDD的Partition最多被子RDD的一个Partition使用

    宽依赖

    多个RDD的partition会依赖同一个父RDD的partition,会引起shuffle

  • 相关阅读:
    EF CodeFirst EntityTypeConfiguration 自关联映射配置
    DDD 领域驱动设计-看我如何应对业务需求变化,领域模型调整?
    DDD 领域驱动设计-看我如何应对业务需求变化,愚蠢的应对?
    【记录】ASP.NET XSS 脚本注入攻击
    【记录】JS 获取图片原始尺寸-防止图片溢出
    让 ASP.NET vNext 在 Mac OS 中飞呀飞。。。
    Building Modern Web Apps-构建现代的 Web 应用程序(一些感想)
    【记录】ASP.NET MVC RegisterBundles
    【记录】JS 生成 URL 二维码
    关于有默认值的字段在用EF做插入操作时的思考(续)
  • 原文地址:https://www.cnblogs.com/screen/p/9481796.html
Copyright © 2020-2023  润新知