数据本地化目的,只移动计算,不移动数据,避免网络资源浪费。

1.首先了解Application任务执行流程:

• 在Spark Application提交后,Driver会根据action算子划分成一个个的job,然后对每一 个job划分成一个个的stage,stage内部实际上是由一系列并行计算的task组成的,然后 以TaskSet的形式提交给你TaskScheduler,TaskScheduler在进行分配之前都会计算出每一个task最优计算位置。Spark的task的分配算法优先将task发布到数据所在的节点上,从而达到数据最优计算位置。

enter image description here

2. – 数据本地化五种级别

• PROCESS_LOCAL 进程本地化 • NODE_LOCA 节点本地化 • NO_PREF 没有本地化 • RACK_LOCAL 机架本地化(集群内) • ANY 跨机架本地化 具体介绍如下图: enter image description here 3.Spark的task的具体分配算法 enter image description here 4. 数据本地性调优

– 配置参数 • spark.locality.wait driver端等待executor执行task 3s • spark.locality.wait.process 等待进程本地化的时间,默认和 spark.locality.wait相等 • spark.locality.wait.node
• spark.locality.wait.rack

  • 如何设置参数:

new SparkConf().set(“spark.locality.wait ”,”6s”);

  • 通过比较task执行时间来确定最优参数;

查看数据本地化执行的方法:

1.查看Console 打印的日志--推荐

2.通过Driver的WEB UI查看 端口:4040