深入浅出Spark(二):血统(DAG)( 六 )


由此可见 , 通过 RDD 的 toDebugString 观察 DAG 的 Stage 划分时 , 制表符是个重要的指示牌 。 另外 , 我们看到第 3、4 行的开头都有个括号 , 括号里面是数字 , 这个数字标记的是 RDD 的 partitions 大小 。 当然了 , 观察 RDD、DAG、Stage 还有更直观的方式 , Spark 的 Web UI 提供了更加丰富的可视化信息 , 不过 Spark 的 Web UI 面板繁多 , 对于新同学来说一眼望去反而容易不知所措 , 也许后面时间允许的话我们单开一篇 Spark Web UI 的串讲 。
Postscript本篇是《Spark 分布式计算科普专栏》的第二篇 , 笔者学浅才疏、疏漏难免 。 如果您有任何疑问 , 或是觉得文章中的描述有所遗漏或不妥 , 欢迎在评论区留言、讨论 。 掌握一门技术 , 书本中的知识往往只占两成 , 三成靠讨论 , 五成靠实践 。 更多的讨论能激发更多的观点、视角与洞察 , 也只有这样 , 对于一门技术的认知与理解才能更深入、牢固 。
在本篇博文中 , 我们从 DAG 的边 —— Spark RDD 算子入手 , 介绍了衔接 RDD 的两大类算子:Transformations 和 Actions , 并对惰性计算有了初步的认知 。 然后 , 还是以土豆工坊为例 , 介绍 DAGScheduler 切割 DAG、生成 Stage 的流程和步骤 , 尤其需要注意的是 DAGScheduler 以 Shuffle 为边界划分 Stage 。
最后 , 用上一篇的 WordCount 简单展示了 DAG 与 Stage 的关系 。 细心的读者可能早已发现 , 文中多次提及“后文书再展开”、“后面再单开一篇” , Spark 是一个精妙而复杂的分布式计算引擎 , 在本篇博文中我们不得不对 Spark 中的许多概念都进行了“前置引用” 。 换句话说 , 有些概念还没来得及解释(如惰性计算、Shuffle、TaskScheduler、TaskSet、Spark 调度系统) , 就已经被引入到了本篇博文中 。 这样的叙述方法也许会给您带来困惑 , 毕竟 , 用一个还未说清楚的概念 , 去解释另一个新概念 , 总是感觉没那么牢靠 。
常言道:“杀人偿命、欠债还钱” , 在后续的专栏文章中 , 我们会继续对 Spark 的核心概念与原理进行探讨 , 慢慢地把欠您的技术债还上 , 尽可能地还原 Spark 分布式内存计算引擎的全貌 。 毕竟 Spark 调度系统为何方神圣 , DAGScheduler 伙同 TaskScheduler、SchedulerBackend、TaskSetManager 等一众大佬如何演绎权利的游戏 , 且听下回分解 。
作者简介
吴磊 , Spark Summit China 2017 讲师、World AI Conference 2020 讲师 , 曾任职于 IBM、联想研究院、新浪微博 , 具备丰富的数据库、数据仓库、大数据开发与调优经验 , 主导基于海量数据的大规模机器学习框架的设计与实现 。 现担任 Comcast Freewheel 机器学习团队负责人 , 负责计算广告业务中机器学习应用的实践、落地与推广 。 热爱技术分享 , 热衷于从生活的视角解读技术 , 曾于《IBM developerWorks》和《程序员》杂志发表多篇技术文章 。
延伸阅读:
深入浅出Spark(一):内存计算的由来-InfoQ
关注我并转发此篇文章 , 私信我“领取资料” , 即可免费获得InfoQ价值4999元迷你书 , 点击文末「了解更多」 , 即可移步InfoQ官网 , 获取最新资讯~


推荐阅读