spark RDD原理

​ 首先我觉得原理性的东西,重要的在于了解整个业务的运行流程。虽然在面试中狠问底层这是区分面试者的重要手段,但在实际工作中,最重要的还是提高业务运行的效率。当然知道框架运行的原理越细说明面试者对底层运行接触的时间就越久。然而人的精力是有限的。深入源码固然能提升能力。这里只对原理做一个简单的阐述。

​ 整个spark RDD运行在资源调度系统yarn上,运行代码由spark-submit提交到rm,rm将业务交给nm上的driver,driver会把业务交由executors具体去执行,executors上进行RDD弹性分布式计算,相较于MapReduce,shufflemapRDDs之间一般省去了shuffle落盘的过程,这也是spark速度比mr引擎快的原因。

​ 我们知道spark RDD算子包括transformation算子和action算子,运算过程主要发生map阶段,经过reduce聚合后action算子进行提交job任务,而transformation算子是懒加载的,也就是说,前面的运算过程并不会立即执行,application需要action算子进行触发,action算子的数量决定了job的个数,action算子中的DAGScheduler会对job任务进行切分,并寻找依赖关系,根据是否是宽依赖来确定stag个数。job的task个数由一个stage阶段最后一个RDD的partition个数决定。

​ spark application的运行效率取决于数据是否均衡,可以通过合理的分区来确保各个分区数据的均衡,常用的分区方案有:hash分区,range分区,自定义分区,也可以在初始化sc时指定分区。

​ 数据均衡可以使transformation算子在各个分区完成时间相差减小以提高运行效率,常见的转换算子分为value型,双value交互,key-value型,在不同的业务场景下选择不同的运算组合以达到最佳的效率是设计者的初衷。

​ 未完待续。。。

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2020-2021 ycfn97
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信