【摘要】:数据本地化将对Spark job的性能有很显著的影响。反之,当数据和程序代码分离了,其中一项必须移动到另一项上。所谓数据本地化,就是处理数据与代码在不同距离的情况下的应对策略。这里介绍几个基于数据当前位置的本地化级别,距离是由近到远的顺序。3)NO_PREF:数据从不同的地方获得,而且还没有本地偏好。5)ANY:数据不在同一个机架,而可能处于任何位置。
数据本地化将对Spark job的性能有很显著的影响。如果计算需要的数据和程序代码都在一起(同一台机器),那么计算起来就会很快。反之,当数据和程序代码分离了,其中一项必须移动到另一项上。通常而言,移动序列化之后的程序代码肯定比移动笨重的数据要好,因为代码比数据占用空间小。Spark基于数据本地化建立一个调度策略。
所谓数据本地化,就是处理数据与代码在不同距离的情况下的应对策略。这里介绍几个基于数据当前位置的本地化级别,距离是由近到远的顺序。
1)PROCESS_LOCAL:数据与程序代码在同一个JVM中,这是最好的情况。
2)NODE_LOCAL:数据在同一台节点上。这样的话数据需要在进程间传输,速度比PROCESS_LOCAL慢一点。
3)NO_PREF:数据从不同的地方获得,而且还没有本地偏好(Locality Preference)。(www.xing528.com)
4)RACK_LOCAL:数据在同一个服务器机架上,但是数据位于不同的服务器,所以需要通过网络交换机传输数据。
5)ANY:数据不在同一个机架,而可能处于任何位置。
如果可以,Spark更倾向于把task放在最优的本地化级别,就是数据与程序代码越近越好。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。