A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 不二晨 金牌黑马   /  2018-12-4 09:09  /  1449 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一、两者执行流程:
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值进行排序和分组,具有相同key值的value则放到同一个集合中。

Reduce阶段:

1.对于多个map任务的输出,按照不同的分区,通过网络传输到不同的Reduce节点。
2.对多个map任务的输出结果进行合并、排序,用户书写reduce函数,对输入的key、value进行处理,得到新的key、value输出结果。
3.将reduce的输出结果保存在文件中。

基本原理上:
a. MapReduce:基于磁盘的大数据批量处理系统
b. Spark:基于RDD(弹性分布式数据集)数据处理、显示的将RDD数据存储到磁盘和内存中

二.优劣对比
Spark是新兴的大数据计算框架,那么它对比于mapreduce又有那些有点呢

1.计算快速:spark是基于内存和磁盘的计算,在内存足够的情况下,计算都在内存中进行,减少了低效的磁盘交互。而mapreduce在map跟reduce阶段都是要进行磁盘交互的,这就使得他们的计算速度降低不少
2.容错性:spark由于DAG和rdd,保证了良好的容错机制。并可以建立检查点。
3.易用性:spark兼容多种语言,java、scala、python等
4.通用性:Spark提供了完整而强大的技术栈,包括SQL查询、流式计算、机器学习和图算法组件
5.运行模式多样:可运行于独立的集群模式中,可运行于Hadoop中,也可运行于Amazon EC2等云环境中,并且可以访问HDFS、HBase、Hive等多种数据源

对于复杂业务的计算,mapreduce要进行多次map、reduce,极大消耗性能和时间,而spark提供了丰富的算子,可满足大多数的业务需求计算。同时spark还支持实时流计算,这也是它能快速占领大数据计算领域一席之地的原因之一。

Spark对比mapreduce有这么多的优点,那么是不是我们就可以舍弃MR呢,其实不然,MR能屹立大数据计算领域这么久,自有其原因。MR优于spark的在什么地方呢

spark由于同节点上所有任务运行在一个进程中,因此,会出现严重的资源争用,难以做到细粒度控制每个任务占用资源。与之相反的是MapReduce,它允许用户单独为Map Task和Reduce Task设置不同的资源,进而细粒度控制任务占用资源量,有利于大作业的正常平稳运行。

万物存在都有其道理,MR肯定还有其他优势,只是我还没有探索到。而至于spark会不会完全取代MR,这也不是我可以预测的,我能做的就只有不断学习,不断进步,在他们的发展道路上做一见证人。
---------------------
【转载,仅作分享,侵删】
原文:https://blog.csdn.net/weixin_42125869/article/details/84724177


3 个回复

倒序浏览
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马