Spark Shuffle机制
运行在不同stage、不同节点上的task见通过shuffle机制传递数据,shuffle解决的问题是如何将数据进行重新组织,使其能够在上游和下游task之间进行传递和计算。如果只是单纯的数据传递,则只需要将数据进行分区、通过网络传输即可,没有太大的难度,但shuffle机制还需要进行各种类型的计算(如聚合、排序),而且数据量一般会很大,如果支持这些不同类型的计算,如果提高shuffle的性能都是shuffle机制设计的难点。
运行在不同stage、不同节点上的task见通过shuffle机制传递数据,shuffle解决的问题是如何将数据进行重新组织,使其能够在上游和下游task之间进行传递和计算。如果只是单纯的数据传递,则只需要将数据进行分区、通过网络传输即可,没有太大的难度,但shuffle机制还需要进行各种类型的计算(如聚合、排序),而且数据量一般会很大,如果支持这些不同类型的计算,如果提高shuffle的性能都是shuffle机制设计的难点。
Spark具体采用3个步骤来生成物理执行计划,首先根据action操作顺序将应用划分为作业(job),然后根据每个job的逻辑处理流程中的ShuffleDependency依赖关系,将job划分为执行阶段(stage)。最后在每个stage中,根据最后生成的RDD的分区个数生成多个计算任务(task)。
OpenTelemetry是CNCF孵化的开源观测框架,用于创建和管理遥测数据(telemetry),比如metrics, tracing, logs。这一项目的核心目标是避免依赖于vendor,从而可以更好地集成和拓展。
Spark应用程序需要先转化为逻辑处理流程,逻辑处理流程主要包括:
数据操作分为两种,transformation操作并不会触发job的实际执行,action操作创建job并立即执行。类似于java中的stream,采用懒加载的方式。
RDD (Resilient Distributed DataSet)是spark对计算过程中输入输出数据以及中间数据的抽象,表示不可变、分区的集合数据,可以被并行处理。