首页 理论教育 Stage内部Task的最佳位置算法优化

Stage内部Task的最佳位置算法优化

时间:2023-06-29 理论教育 版权反馈
【摘要】:在DAGScheudler的submitMissingTasks方法中体现了利用RDD的本地性来得到Task的本地性,从而获取Stage内部Task的最佳位置。DAGScheudler的submitMissingTasks方法的相关部分关键代码如下:DAGScheudler的getPreferredLocs方法只是调用getPreferredLocsInternal方法。DAGScheudler的getPreferredLocsInternal方法具体实现了一个Partition的数据本地性的算法。

Stage内部Task的最佳位置算法优化

在DAGScheudler的submitMissingTasks方法中体现了利用RDD的本地性来得到Task的本地性,从而获取Stage内部Task的最佳位置。DAGScheudler的submitMissingTasks方法会通过调用getPreferredLocs方法得到Task最佳位置,并把结果存放到taskIdToLocations Map中以便使用。

DAGScheudler的submitMissingTasks方法的相关部分关键代码如下:

DAGScheudler的getPreferredLocs方法只是调用getPreferredLocsInternal方法。

DAGScheudler的getPreferredLocs方法代码如下。

DAGScheudler的getPreferredLocsInternal方法具体实现了一个Partition的数据本地性的算法。在具体算法实现时,首先查询DAGScheduler的内存数据结构中是否存在当前Paritition的数据本地性的信息,如果有则直接返回,如果没有首先会调用rdd.getPreferedLocations,例如,想让Spark运行在HBase上或一种现在还没有直接支持的数据库上面,此时开发者需要自定义RDD,为了保证Task计算的数据本地性,最为关键的方式是必须实现RDD的get-PreferedLocations,数据本地性在底层运行之前就完成了。(www.xing528.com)

DAGScheudler的getPreferredLocsInternal方法代码如下:

DAGScheduler计算数据本地性时巧妙地借助了RDD自身的getPreferedLocations中的数据,最大化地优化效率,因为getPreferedLocations中表明了每个Partition的数据本地性,虽然当前Partition可能被persist或者checkpoint,但是persist或者checkpoint默认情况下肯定是和getPreferedLocations中的Partition数据本地性一致,所以这就极大地简化了Task数据本地性算法的实现和效率的优化。

注意,数据本地性是指:确定数据在哪个结点上,就到哪个结点的Executor上去运行。

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

我要反馈