• spark学习笔记(1)---对RDD的理解


    • RDD 是什么?

    RDD全称Resilient Distributed Dataset,光看名字并不能理解它到底是个什么东西,其实,我们可以就把它当做是一个分布式的容器,每个容器都有很多的分区,一般情况下每个分区在不同的机器上。对RDD的操作就是对每个分区的操作。如下图

    • RDD 5大特性

    在RDD的源码中,我们可以看到下面一段

    * Internally, each RDD is characterized by five main properties:*
    * - A list of partitions
    * - A function for computing each split
    * - A list of dependencies on other RDDs
    * - Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
    * - Optionally, a list of preferred locations to compute each split on (e.g. block locations for* an HDFS file)

    1.一个有多个分区的列表,就如同我们刚刚所说的,RDD就是一个有很多分区的容器,一般情况下每个分区在不同的机器上。
    2.对于每一个切片(分区),是使用同一个函数在计算,如上图所示,每一个分区独立计算,而且他们计算的函数是相同的(当然这里指的是同一阶段)。
    3.每个RDD都依赖于其父RDD,上图中计算后的RDD就依赖于其父RDD。
    4.可选的,对于key-value类型的RDD,存在一个Partitioner(划分器)。(也就是它形成宽窄依赖)。(划分器目前有两种,一种是HashPatitioner,根据key的 hash值将RDD划分到不同的分区,另一种是RangePartitioner,根据key的范围值划分到不同分区)。
    5.可选的,对于每一个切片(分区),都会选择一个尽可能近的来计算,减少网络传输。例如,HadoopRDD分区的首选位置就是HDFS块所在的节点。

    • RDD 的分区

    前面一直在说RDD的分区,RDD的分区到底是什么?每个RDD的分区都分布在集群的节点中,分区的多少涉及对这个RDD进行并行计算的粒度。其实,分区是一个逻辑概念,变换前后的新旧分区在物理上可能是同一块内存或存储。用户可以指定分区数,如果没有指定的话为默认值,默认值是该程序分配到的CPU核数,如果从HDFS文件创建,默认为文件的数据块数。

     

    • RDD 依赖关系

    在RDD中将依赖关系分成了两种类型:窄依赖(Narrow Dependencies)和宽依赖(Wide Dependencies),如下图。窄依赖是指每个父RDD的分区都至多被一个子RDD的分区使用,而宽依赖是多个子RDD的分区依赖一个父RDD的分区。

    那么为什么要划分这两种依赖呢?

    1.窄依赖允许在单个集群节点上流水线式执行,这个节点可以计算所有父级分区。例如,可以逐个元素地依次执行filter操作和map操作,这个节点可以计算所有父级分区。相反,宽依赖需要所有的父RDD数据可用,并且数据已经通过类MapReduce的操作shuffle完成。

    2.在窄依赖中,节点失败后的恢复更加高效。因为只有丢失的父级分区需要重新计算,并且这些丢失的父级分区可以并行地运行在不同节点上重新计算。相反,在宽依赖的继承关系中,单个失败的节点可能导致一个RDD的所有先祖RDD中的一些分区丢失,导致计算的重新执行。

    划分宽窄依赖,也是后面我们会看到的根据job切分stage的一个重要依据。

    进一步理解宽依赖和窄依赖

    对于WordCount程序

    • 参考资料

    《图解spark:核心技术与案例》 郭景瞻  博客  http://www.cnblogs.com/shishanyuan/

  • 相关阅读:
    分治fft
    DSU on tree
    最小矩形覆盖
    用gallery展示图片,实现中间图片稍大,两边较小的效果
    动态刷新listview中的数据
    比较两个文件是否一样
    安卓巴士Android开发神贴整理
    Failed to register input channel. Check logs for details.
    解决scrollview嵌套ImageView时,出现除顶部和底部黑块的问题
    获取系统图片,并放入ImageList
  • 原文地址:https://www.cnblogs.com/yangtong/p/6667817.html
Copyright © 2020-2023  润新知