• Spark学习之路(二)


    1. Spark的逻辑处理流程主要分为四个部分:
    • 数据源:可以是hdfs、分布式kv数据(Hbase)、本地文件等等
    • 数据模型:RDD(分布式弹性数据集)是Spark的核心概念,即输入、输出、中间数据抽象表示为统一的数据模型
    • 数据操作:主要分为transformation和action两种操作
    • 处理数据的计算结果:以文件形式存储到hdfs文件系统或者计算结果汇集到driver端
    1. RDD是如何生成的?

    Spark对程序中的每一个数据进行操作,比如transformation操作(map)就会生成新的rdd,对于复杂的操作(join)则会生成多个rdd

    1. 新的RDD分区数量是如何得到的?

    用户和parent RDD两者共同决定新的RDD分区数量,比如用户可以通过repartion()和coalesce()决定新的RDD分区的个数;如果用户没有决定RDD的个数,那么新的RDD的个数由parent RDD分区个数的最大值决定

    1. 新的RDD和parent RDD之间的依赖关系有哪些?

    根据新的RDD是否完全依赖parent RDD的一个或者多个分区可以定义新的RDD和parent RDD之间是宽依赖还是窄依赖。宽依赖关心仅仅依赖parent RDD分区中的某个部分而非全部,而窄依赖则依赖parent RDD分区中的整个部分。

    1. 为什么要划分RDD之间的依赖关系?

    Spark会根据依赖关系把一个作业job划分为多个阶段stage,对于宽依赖和窄依赖而言,窄依赖对于作业的优化很有利,如果连续的变换操作序列都是窄依赖,就可以把很多个 fork/join 合并为一个,通过这种合并,不但减少了大量的全局路障(Barrier),而且无需保存很多中间结果RDD,这样可以极大地提升性能。

    1. Spark的三种分区方法
    • 水平划分:一般针对输入数据采用这种分区办法,比如hdfs会对数据进行水平划分,按照128M的大小将数据划分为不同的分区
    • Hash划分:使用record的hash值来对数据进行划分
    • Range划分:根据元素的大小按照一定的区间进行分区
    1. 常用的数据操作

    transformation和action

  • 相关阅读:
    装饰器模式
    原型模式
    观察者模式
    Apollo 代码的编译演示
    Apollo 框架的剖析1
    gPRC学习笔记
    Docker入门
    ROS入门学习
    Mudo C++网络库第十一章学习笔记
    Mudo C++网络库第十章学习笔记
  • 原文地址:https://www.cnblogs.com/swordspoet/p/14548962.html
Copyright © 2020-2023  润新知