博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
31、数据本地化
阅读量:5220 次
发布时间:2019-06-14

本文共 1468 字,大约阅读时间需要 4 分钟。

一、数据本地化

1、背景

数据本地化对于Spark Job性能有着巨大的影响。如果数据以及要计算它的代码是在一起的,那么性能当然会非常高。但是,如果数据和计算它的代码是分开的,那么其中之一必须到另外一方的机器上。通常来说,移动代码到其他节点,会比移动数据到代码所在的节点上去,速度要快得多,因为代码比较小。Spark也正是基于这个数据本地化的原则来构建task调度算法的。数据本地化,指的是,数据离计算它的代码有多近。基于数据距离代码的距离,有几种数据本地化级别:1、PROCESS_LOCAL:数据和计算它的代码在同一个JVM进程中。2、NODE_LOCAL:数据和计算它的代码在一个节点上,但是不在一个进程中,比如在不同的executor进程中,或者是数据在HDFS文件的block中。3、NO_PREF:数据从哪里过来,性能都是一样的。4、RACK_LOCAL:数据和计算它的代码在一个机架上。5、ANY:数据可能在任意地方,比如其他网络环境内,或者其他机架上。

2、图解

Task要处理的partition的数据,在某一个Executor中,TaskScheduler首先会尽量用最好的本地化级别去启动task,也就是说,会尽量在哪个包含了要处理的partition的executor中,去启动task;此时,Executor已经再执行好几个task了,没有空闲资源来执行这个task;默认情况下,spark会等待一会,等待Executor什么时候可以空闲出一个cpu core,从而来启动这个task,让它实现最好的本地化级别;但是如果等待了一会(时间是可以调优的,通过参数设置),发现始终没有等到Executor的core释放,那么会放大一个级别,去尝试启动这个task;如果这个rdd之前持久化过,task会去调用RDD的iterator()方法,然后通过executor关联的BlockManager,来尝试获取数据,BlockManager底层,首先尝试从getLocal()在本地找数据,如果没有找到的话,那么用getRemote(),通过BlockTransferService,链接到有数据的BlockManager,来获取数据;如果没有持久化过,那么就computerOrReadCheckpoint();如果还是不能启动,继续放大级别;

3、数据本地化优化

Spark倾向于使用最好的本地化级别来调度task,但是这是不可能的。如果没有任何未处理的数据在空闲的executor上,那么Spark就会放低本地化级别。这时有两个选择:第一,等待,直到executor上的cpu释放出来,那么就分配task过去;第二,立即在任意一个executor上启动一个task。Spark默认会等待一会儿,来期望task要处理的数据所在的节点上的executor空闲出一个cpu,从而将task分配过去。只要超过了时间,那么Spark就会将task分配到其他任意一个空闲的executor上。可以设置参数,spark.locality系列参数,来调节Spark等待task可以进行数据本地化的时间。spark.locality.wait(3000毫秒)、spark.locality.wait.node、spark.locality.wait.process、spark.locality.wait.rack。

转载于:https://www.cnblogs.com/weiyiming007/p/11263648.html

你可能感兴趣的文章
push指令的执行过程
查看>>
陌生的熟悉地
查看>>
python 案例 011(猜数值)
查看>>
新写PHP HTTP断点续传类文件代码
查看>>
MySQL数据库索引(上)
查看>>
使用expect实现自动登录的脚本
查看>>
【转载】SSD断电保护原理
查看>>
[转]Struts2理解--动态方法和method属性及通配符_默认Action
查看>>
编写一个程序,指定一个文件夹,能自动计算出其总容量
查看>>
排球积分程序
查看>>
表关联ID相同数据update修改
查看>>
参考美团、饿了么 && localStorage
查看>>
代码/项目规范
查看>>
MySQL基础知识
查看>>
20165224 陆艺杰 《Java程序设计》课程总结
查看>>
[日常工作]虚拟机或者实体机转换成HyperV虚拟机的方法
查看>>
前端面试手册
查看>>
聚合索引(clustered index) / 非聚合索引(nonclustered index)
查看>>
CodeForces7D 字符串hash + dp
查看>>
history of Program
查看>>