• 大三寒假学习 spark学习 RDD


    设计背景:

      许多迭代式算法(比如机器学习、图算法等)和交互式数据挖掘工具,共同之处是,不同计算阶段之间会重用中间结果

      目前的MapReduce框架都是把中间结果写入到HDFS中,带来大量的数据复制、磁盘I0和序列化开销

      RDD就是为了满足这种需求而出现的,它提供了一个抽象的数据架构

      我们不必担心底层数据的分布式特性,只需将具体的应用逻辑表达为一系列转换处理

      不同RDD之间的转换操作形成依赖关系,可以实现管道化,避免中间数据存储

    RDD概念:

      一个RDD就是一个分布式对象集合,本质上是一个只读的分区记录集合,每个RDD可分成多个分区,每个分区就是一个数据集片段,并且一个RDD的不同分区可以被保存到集群中不同的节点上,从而可以在集群中的不同节点上进行并行计算

      RDD提供了一种高度受限的共享内存模型,即RDD是只读的记录分区的集合,不能直接修改,只能基于稳定的物理存储中的数据集创建RDD,或者通过在其他RDD上执行确定的转换操作(如map、join和group by)而创建得到新的RDD

    RDD操作:

      表面上RDD的功能很受限、不够强大,实际上RDD已经被实践证明可以高效地表达许多框架的编程模型((比如MapReduce、sQL、Pregel)

      RDD提供了一组丰富的操作以支持常见的数据运算,分为“动作”(Action)和“转换”(Transformation)两种类型

      RDD提供的转换接口都非常简单,都是类似map、filter. groupBy、 join等粗粒度的数据转换操作,而不是针对某个数据项的细粒度修改(不适合网页爬虫)

      Spark用Scala语言实现了RDD的APl,程序员可以通过调用API实现对RDD的各种操作

    RDD的执行过程:

      RDD读入外部数据源进行创建

      RDD经过一系列的转换(Transformation)操作每一次都会产生不同的RDD供给下一个转换操作使用

      最后一个RDD经过“动作”操作进行转换并输出到外部数据源

      这一系列处理称为一个Lineage(血缘关系),即DAG拓扑排序的结果

      优点:惰性调用、管道化、避免同步等待、不需要保存中间结果、每次操作变得简单

    RDD特性:

    • 存放的数据可以是Java对象,避免了不必要的对象序列化和反序列化
    • 高效的容错性
    • 中间结果持久化到内存,数据在内存中的多个RDD操作之间进行传递,避免了不必要的读写磁盘开销

      Spark采用RDD以后能够实现高效计算的原因:

        现有容错机制:数据复制或者记录日志

        RDD:血缘关系、重新计算丢失分区、无需回滚系统、重算过程在不同节点之间并行、只记录粗粒度的操作

  • 相关阅读:
    Java jar: A JNI error has occurred, please check your installation and try again
    iOS开发UITouch触摸API简介
    iOS 绘制图形
    iOS图形绘制
    iOS利用drawRect方法绘制图形
    iOS 混合变换旋转 CGAffineTransform 的使用
    [原创]什么是持续集成,持续交付和持续部署?
    [原创]Windows下Python+Pytest+Allure 接口自动化测试环境安装
    Embeded linux 之 UBIFS文件系统【转】
    ARM嵌入式学习笔记——《根文件系统》【转】
  • 原文地址:https://www.cnblogs.com/fengchuiguobanxia/p/15825895.html
Copyright © 2020-2023  润新知