首页 理论教育 Shuffle框架源代码解析

Shuffle框架源代码解析

时间:2023-06-29 理论教育 版权反馈
【摘要】:在SparkEnv源代码中可以看到设置的配置属性,以及当前在Spark的ShuffleManager可插拔框架中已经提供的ShuffleManager具体实现,代码如下。Shuffle系统的框架可以以ShuffleManager作为入口进行解析。

Shuffle框架源代码解析

用户可以通过自定义ShuffleManager接口,并通过指定的配置属性进行设置,也可以通过该配置属性指定Spark已经支持的ShuffleManager具体实现子类。

在SparkEnv源代码中可以看到设置的配置属性,以及当前在Spark的ShuffleManager可插拔框架中已经提供的ShuffleManager具体实现,代码如下。

从上面的代码中可以看出,ShuffleManager是Spark Shuffle系统提供的一个可插拔式接口,可以通过"spark.shuffle.manager"配置属性来设置自定义的ShuffleManager。

在Driver和每个Executor的SparkEnv实例化过程中,都会创建一个ShuffleManager,用于管理块数据,提供集群块数据的读写,包括数据的本地读写和读取远程结点的块数据。

Shuffle系统的框架可以以ShuffleManager作为入口进行解析。在ShuffleManager中指定了整个Shuffle框架所使用的各个组件,包括如何注册到ShuffleManager以获取一个用于数据读写的处理句柄ShuffleHandle,通过ShuffleHandle获取特定的数据读写接口:ShuffleWriter与ShuffleReader,以及如何去获取块数据信息的解析接口ShuffleBlockResolver。下面通过源代码分别对这几个比较重要的组件进行解析。

1.ShuffleManager源代码解析

由于ShuffleManager是Spark Shuffle系统提供的一个可插拔式接口,已经提供的具体实现子类或自定义具体实现子类时,都需要重写ShuffleManager类的抽象接口,下面首先分析ShuffleManager的源代码,代码如下。

2.ShuffleHandle源代码解析

ShuffleHandle比较简单,用于记录Task与Shuffle相关的一些元数据,同时也可以作为不同具体Shuffle实现机制的一种标志信息,控制不同具体实现子类的选择等。如下所示。(www.xing528.com)

3.ShuffleWriter源代码解析

继承ShuffleWriter的每个具体子类会实现write接口,给出任务在输出时的记录具体写的方法。如下列代码所示。

4.ShuffleReader源代码解析

继承ShuffleReader的每个具体子类会实现read接口,计算时负责从上一阶段Stage的输出数据中读取记录。如下列代码所示。

5.ShuffleBlockResolver源代码解析

ShuffleBlockResolver的源代码如下所示。

继承ShuffleBlockResolver的每个具体子类会实现getBlockData接口,给出具体的获取块数据的方法。

目前在ShuffleBlockResolver的各个具体子类中,除了给出获取数据的接口之外,通常会提供如何解析块数据信息的接口,即提供了写数据块时的物理块与逻辑块之间映射关系的解析方法。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈