我正在研究locality如何影响spark sql作业中的任务读取时间。
测试:
在谈到我的问题之前,我想提出一些假设:
最后问题:)
如果在单个执行器中分配了多个VCores(例如8个),根据上述假设,我希望RACK_LOCAL任务的读取时间比NODE_LOCAL的读取时间快。
Insted,根据我的测试,RACK_LOCAL读取时间平均比NODE_LOCAL慢几个百分点,如here所示。很显然,我错过了一些东西,但是我没有出现原因而四处乱窜。这是什么东西?
链接的figure显示增加的VCores数量的NODE_LOCAL和RACK_LOCAL平均任务持续时间。
谢谢, 洛伦佐
答案 0 :(得分:4)
实际上我发现我的一个假设是不正确的:“网络吞吐量优于硬盘吞吐量因此在压力硬盘下是瓶颈”
千兆交换机的平均速度为0.8,这意味着两个节点以100MB / s的网络吞吐量链接在一起。 HDD通常可以150MB / s的速度读取。
由于在管道中执行远程读取和网络传输,NODE_LOCAL和RACK_LOCAL之间的微小差异是由于读取和传输之间发生的远程缓冲时间所致
答案 1 :(得分:2)
RACK_LOCAL表示正在从远程节点上的HDD读取块,然后通过网络传递。 NODE_LOCAL表示正在此节点上读取块,因此省略“网络”部分,因此NODE_LOCAL通常应该更快。