一、两者执行流程:
1.spark执行流程:
1.driver跟master建立连接并申请资源
2.Master进行资源调度
3.Master跟worker进行rpc通信,worker启动Executer
4.启动Executor
5.Executor跟driver进行通信
6.Rdd触发action后,根据rdd从后往前推断依赖关系,遇到shuffle递归切分stage,直到某个rdd没有父rdd
7.DAGSchedule切分完stage后,先提交前面的stage,执行完成在提交后面的stage,stage会产生task,一个stage会产生业务逻辑相同的task,然后将以taskset的形式传递给taskschedule,taskschedule将task序列化,根据资源情况发送给executor
8.发送task给executor
9.Executor接收task后,先将task反序列化,然后将task用一个实现了runnal接口的实现类包装,最后将该包装类丢入线程池执行,调用task的计算逻辑
2.Mapreduce
Map阶段:
1.读取输入文件的内容,并解析成键值对(<key, value>)的形式,输入文件中的每一行被解析成一个<key, value>对,每个<key, value>对调用一次map()函数。
2.用户写map()函数,对输入的<key,value>对进行处理,并输出新的<key,value>对。
3.对得到的<key,value>进行分区操作。
4.不同分区的数据,按照key值进行排序和分组