Spark本地化原则


一、为什么要本地化?

数据本地化对spark的应用程序性能具有重要的影响,当数据与计算该数据的代码在一起,那应用的性能是很高的,如果数据与代码不在同一个地方,那么就要将代码移动到数据所在的节点中,因为移动代码相比较于移动数据速度要快得多。 Spark正是通过这样的原则来分配调度task的。

二、数据本地化级别

数据本地化的五个级别,性能递减:

  • PROCESS_LOCAL:进程本地化,性能最佳。数据与计算的代码在同一个jvm进程
  • NODE_LOCAL:节点本地化,数据与计算的代码在同一个节点,比如在不同的executor进程中,或者数据在HDFS的block中
  • NO_PREF:从任何地方访问数据速度都是一样的
  • RACK_LOCAL:数据和计算的代码在同一个机架上
  • ANY:数据在任意地方,比如其他机架上或网络中,性能最差

三、Spark优化

Spark相关配置:

// 默认等待时间是 3s
spark.locality.wait: 3
// 扩展参数,默认值均是spark.locality.wait
spark.locality.process
spark.locality.node
spark.locality.rack

spark本地化原则调度任务原理:

  • spark默认是3秒等待时间,5次重试分配
  • 若超时失败,则下降到下一个本地原则重新分配
  • 数据发生传输时,Task首先BlockManager获取数据,若本地没有数据,则调用getRemote方法从数据所在节点BlockManager获取数据,返回至该节点

总结

本地化原则大大提高了Spark的应用程序计算性能,我们可以通过实际经验设置超时时间,避免等待时间过短产生降级。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值