什么是"弹性"?
一般对于分布式系统,"弹性"指的是可以根据计算规模进行动态伸缩的特性。当计算量增长时,可以动态增加资源来满足计算需求,而当计算量减少时,又可以降低资源配置来节约成本。
我们在看一下RDD定义:Resilient Distributed Datasets,译为弹性分布式数据集,是一种基于集群内存计算的一种抽象。
所以从定义上看,RDD也是基于分布式系统的,主要是通过集群的内存资源来进行数据缓存与计算的,所以RDD的弹性是基于数据量的变化,可以动态的增加或者减少相应的资源(比如内存)来满足计算需求。
RDD的弹性体现
RDD的Partition和Partitioner是弹性的基础
Map端input split决定了Map端的分区数,分区数进一步决定了map阶段task的数量,Shuffle的Map阶段才使用的分区器partitioner,又决定了reduce阶段task的数量。
分区的动态可调是弹性的体现
可以根据数据量的大小,通过repartition、coalesce算子来增加或者减少分区数,来决定Task数的多少。
对应的计算资源调整,可以通过提交任务时的参数来调整,也可以设置成动态调整方式。
容错属不属于弹性?
容错是用来保障稳定性的,划分到"高可用"更合适,跟弹性没有太大关系。
比如:根据血缘对RDD进行出错后的恢复,Stage、Task失败的重试等。
主从架构属不属于弹性?
比如BlockManagerMaster和BlockManager是主从架构的,这个属于分布式系统的基本架构设计,属于系统层面的弹性,不属于RDD层面的弹性。