13.2 Spark数据本地化

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011418530/article/details/82251296

大数据计算的原则,数据不移动,计算移动 ----数据本地化

Application的执行流程:

job在执行之前,首先是由DAGScheduler负责切割Job,划分stage(依据宽窄依耐),DAGScheduler会以taskSet的形式发送TaskScheduler,TaskScheduler会根据数据本地化的算法,发送task到相Executor中执行

如果发送到Executor中的task等到3s,重发5次都无法执行,TaskScheduler就会判断这个Executor资源满了,这个时候TaskScheduler就会降一个数据本地化级别重新发送task,如果还是无法执行,再降一个数据本地化级别,一直到ANY

1,进程本地化 PROCESS_LOCAL task计算的数据就在本进程(同一个Executor)的内存中

2,节点本地化 NODE_LOCAL task计算的数据在同一个worker的不同Executor进程中/task计算的数据是在本地Worker磁盘上

3,没有本地化 NO_PREF 如果读取数据在数据库中

4,机架本地化 RACK_LOCAL task计算数据,在同一个机架不同节点上

5,垮机架 ANY

扫描二维码关注公众号,回复: 3272523 查看本文章

如何提高数据本地化级别?

增加task执行的等待时间,可以重3s,提高到6S;注意不要本末倒置了,提高的时间不要太长

配置参数

spark.locality.wait 默认是3秒 相当于是全局的

spark.locality.wait.process 默认和spark.locality.wait 是相等的

spark.locality.wait.node 默认和spark.locality.wait 是相等的

spark.locality.wait.rack 默认和spark.locality.wait 是相等的

new SparkConf().set("spark.locality.wait","6")

--conf spark.locality.wait=6 提交spark-submit的时候使用

问题:

val rdd1 = sc.textFile("path")

rdd1 = rdd1.cache()

rdd1.count

这个job中的task能达到最高的数据本地化级别吗(PROCESS_LOCAL )?

不能,对于这个job中的task最高的数据本地化级别是NODE_LOCAL

如何查看task计算的数据本地化?

1,taskSetManager打印的日志

2,通过Driver的web端查看 4040端口

猜你喜欢

转载自blog.csdn.net/u011418530/article/details/82251296