zoukankan      html  css  js  c++  java
  • Spark宽依赖、窄依赖

    在Spark中,RDD(弹性分布式数据集)存在依赖关系,宽依赖和窄依赖。

    宽依赖和窄依赖的区别是RDD之间是否存在shuffle操作。

    窄依赖

    窄依赖指父RDD的每一个分区最多被一个子RDD的分区所用,即一个父RDD对应一个子RDD或多个父RDD对应一个子RDD

    • map,filter,union属于窄依赖
    • 窄依赖对于流水化作业有优化效果
    • 每一个RDD算子都是一个fork/join操作,join会写入磁盘,流水线作业优化后fork,中间不join写入磁盘

    宽依赖

    宽依赖指子RDD的每个分区都依赖于父RDD的多个分区

    • groupby和join属于宽依赖
    • DAGScheduler从当前算子往前推,遇到宽依赖,就生成一个stage

    分区划分规则

    1. 分区如何划分
    2. 分区该放到集群内哪个节点

    Spark默认两种划分器:HashPartitioner和RangePartitioner

    宽依赖、窄依赖的概念不仅用在调度,对容错也有用,如果一个节点损坏,运算是窄依赖,只要把丢失的父节点分区重新计算即可。而宽依赖的话,就需要使用checkpoint来检查和重新计算。
    逻辑上,每个RDD的算子都是一个fork/join(此join非上文的join算子,而是指同步多个并行任务的barrier):把计算fork到每个分区,算完后join,然后fork/join下一个RDD的算子。如果直接翻译到物理实现,是很不经济的:一是每一个RDD(即使 是中间结果)都需要物化到内存或存储中,费时费空间;二是join作为全局的barrier,是很昂贵的,会被最慢的那个节点拖死。如果子RDD的分区到 父RDD的分区是窄依赖,就可以实施经典的fusion优化,把两个fork/join合为一个;如果连续的变换算子序列都是窄依赖,就可以把很多个 fork/join并为一个,不但减少了大量的全局barrier,而且无需物化很多中间结果RDD,这将极大地提升性能。Spark把这个叫做流水线(pipeline)优化。
  • 相关阅读:
    打开安装 好的Microsoft Dynamics CRM 4.0 报错误为 Caller does not have enough privilege to set CallerOriginToken to the specified value 的解决办法
    基于 Windows Server 2008 的计算机对 Microsoft Dynamics CRM 4.0 的支持
    Microsoft Dynamics CRM 4.0 如何添加自定义按钮
    Microsoft Dynamics CRM 4.0 Plugin 取值,赋值,查询
    C# 中的 enum(枚举) 类型使用例子
    vue事件的绑定
    表单验证2
    node中模块
    node模块的引入
    node中的读文件
  • 原文地址:https://www.cnblogs.com/chenshaowei/p/12376360.html
Copyright © 2011-2022 走看看