zoukankan      html  css  js  c++  java
  • spark源码系列文章------shuffle模块详解

    摘要: 一、Basic shuffle writer实现解析 在Executor上执行shuffle Map Task时,最终会调用shuffleMapTask的runTask,核心逻辑如下: 1.从sparkEnv中获得shuffleManager; 2.

    一、Basic shuffle writer实现解析

    在Executor上执行shuffle Map Task时,最终会调用shuffleMapTask的runTask,核心逻辑如下:

    1.从sparkEnv中获得shuffleManager;

    2.从manager中获得writer

    3.调用RDD开始计算,运算结果通过writer进行持久化,持久化之前通过Aggregator来确定是否需要进行Map端聚合,然后将结果通过FileShuffleManager#forMapTask的方法写入,写入完成后,会将元数据信息写入MapStatus,然后下游的Task可以通过这个MapStatus取得需要处理的数据。

    这样writer通过ShuffleDependency#partitioner来获得下游partition的数量,下游的每个partition都会对应一个文件,文件名字的格式为:“shuffle_”+shuffledId+"_"+mapId+"_"+reduceId。

    由于每个shuffle Map Task需要为每个下游的Task创建一个单独的文件,因此文件的数量就是number(shuffle_map_task)*number(following_task)。这样会导致创建和打开许多文件。

    后来spark又引入Shuffle Consolidate Writer,原理是core上的第一个Task创建一个文件,该core上的后面的Task的shuffle操作都追加写入改文件,这样文件数量number(core)*number(following_task)  。

    //todo

     原文链接

  • 相关阅读:
    第四周JSP作业
    jsp第二次作业
    3.4软件管理与测试作业
    jsp3月3日作业
    课后listview作业
    安卓sql
    activity带数据跳转
    answers
    阿里云ESC无法使用python发送邮件的问题
    Ubuntu 更改时区
  • 原文地址:https://www.cnblogs.com/jzy996492849/p/7211618.html
Copyright © 2011-2022 走看看