13.2 Spark数据本地化

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

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

 

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

增加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端口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值