zoukankan      html  css  js  c++  java
  • 深入探究Spark -- RDD详解

    Spark最基本、最根本的数据抽象
    RDD基于内存,提高了迭代式、交互式操作的性能
    RDD是只读的,只能通过其他RDD批量操作来创建,提高容错性    另外RDD还具有位置感知性调度和可伸缩性
    RDD只支持粗粒度转换,记录Lineage,用于恢复丢失的分区,从物理存储的数据计算出相应的RDD分区
     
    RDD的5个主要属性:
    1.一组分片,默认的分片个数等于core数。BlockManager进行分配。
     
    2.一个compute计算分区函数,对迭代器进行复合,以分片为单位
     
    3.RDD之间的依赖关系,使数据丢失时,只对部分分区数据重新计算
     
    4.一个partitioner分片函数,分为基于Hash哈希和Range范围的,只有key-value的RDD才有
     
    5.一个列表,存储partition的优先位置
     
     
    两种方式创建RDD:
    1. 已存在的集合创建
    2. 外部数据集创建
     
     
    RDD的转换:
     
     
    RDD的动作:
     
     
    RDD的缓存:
    也称为持久化,实现了重用,是迭代式算法和交互式查询的关键
    通过cache()方法标记为缓存
     
     
    RDD的检查点:
    避免缓存丢失过多带来的计算开销
    调用org.apache.spark.rdd.RDD#checkpoint()指定检查点
     
     
    RDD的依赖关系:
     
    窄依赖和宽依赖
    窄依赖:一个parent RDD的partition最多被子RDD的一个partition依赖
    宽依赖:多个子RDD的partition依赖同一个parent RDD的partition
     
    窄依赖包括的函数:
    map、filter、union,仅仅和已知的partition进行join,都是窄依赖,不会引入昂贵的shuffle,partition互相独立,计算任务可以并行执行
     
    宽依赖包括的函数:
    groupByKey、需要parent RDD的所有partition进行join,都属于宽依赖,需要shuffle过程
    支持两种shuffle manager,hash和sort
     
     
     
    DAG生成:
    RDD的依赖关系,生成了逻辑上的DAG
    Spark根据宽依赖将DAG划分成不同的stage
     
     
    RDD的计算:
    一系列转换后,最后一个RDD触发动作,生成Job,划分到Task中,提交集群上的计算节点,最终由Executor执行计算
    task分为ShuffleMapTask和ResultTask,其中为结果生成的ResultTask被发送到Executor中
     
     
    缓存的处理:
    cacheManager,RDD可更简单从Storage读写。
    通过getOrCompute判断是否计算
     
     
    checkpoint处理:
    没有缓存的情况下,判断是否有checkpoint,没有就开始计算
     
     
    RDD的容错机制:
    基于Lineage
    stage之间的依赖关系可以认为就是Lineage
    Tachyon 两个维度容错,元数据容错(元数据保存到Image文件中,并保存变化到EditLog中),另一个就是Lineage容错机制
     
     
    最后强调:RDD不需要物化!!
  • 相关阅读:
    普通文件的上传(表单上传和ajax文件异步上传)
    React Ant Design+Node.js Express+Mysql实现后端分页(带富文本编辑器)
    Express中增删改查相关的中间件
    React中使用富文本编辑器react-draft-wysiwyg
    Express中aixos请求的(批量)删除用POST方法,其它请求的(批量)删除可以用DELETE方法
    React中将字符串转义成html语句
    Vue中如何设置代理跨域请求数据
    React中如何设置代理跨域请求数据
    axios发送post请求,服务端无法正常获取参数(比如:node服务器无法通过req.body获取参数)解决方案
    LeetCode-162.寻找峰值
  • 原文地址:https://www.cnblogs.com/kinghey-java-ljx/p/8519012.html
Copyright © 2011-2022 走看看