您的位置:首页 > 其它

Spark计算引擎原理

2016-10-21 23:03 513 查看
一、Spark内部原理

——通过RDD,创建DAG(逻辑计划)

——为DAG生成物理查询计划

——调用并执行Task



二、生成逻辑执行图:产生RDD

生成RDD的DAG图。



三、生成逻辑执行图:RDD之间关系

依赖关系分为两类。

完全依赖前面的partition只对应后面的一个partition,不会是多个。重点关注部分依赖(shuffle)





四、生成逻辑执行图:Shuffle



—每个reduce task要从每个map task端读取一部分数据,网络连接数是:M*R。

—shuffle是分布式计算框架的核心数据交换方式,其实现方式直接决定了计算框架的性能和扩展性。

—产生shuffle的算子:join、cogroup、和*ByKey(reduceByKey,groupByKey,sortByKey)

五、生成逻辑执行图:算子举例(1)



算子举例(2)



算子举例(3)



算子举例(4)



六、生成物理执行图:划分stage

物理计划分两步:划分stage;产生task。



前两个stage没有依赖关系可以并行的算。



综合实例(看图)

//vidCount vid =>1
//vidToSidNBC vid => sid for show of NBC
//vidToSidABC vid => sid for show of ABC

vidCounts=vidCount.reduceByKey(_+_)
vidToSid=vidToSidNBC.union(vidToSidABC)
vidToSidCount=vidToSid.join(vidToSidABC)
sidCount=vidToSidCount
.map(item => item._2)
.reduceByKey(_+_)


逻辑执行图



没有依赖关系可以并行计算。下面分成五个stage。



生成13个task。



七、调度和提交任务

1.作业调度

——FIFO(默认)或Fair

——优化机制:数据本地性和推测执行

2.任务执行

——Task被序列化后,被driver发送到executor上执行,executor还原task进行本地计算。

——ShuffleMapTask将中间数据写到本地(必须写磁盘,如果不写磁盘容错、效率等都会非常差),ResultTask远程读取数据

——数据用的时候再算,而且数据是流到要计算的位置的

八、生成Job(遇到action开始执行)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息