Spark比Mapreduce快的原因
(1)问题分析
考官主要考核你对Spark和Hadoop运行机制的理解,考察你对技术应用场景的敏感性和理解程度,这对工作的具体质量有很大的影响。
(2)核心答案讲解
1)基于内存
spark是基于内存进行数据处理的,MapReduce是基于磁盘进行数据处理的。
MapReduce的设计:中间结果保存在文件中,提高了可靠性,减少了内存占用。但是牺牲了性能。
Spark的设计:数据在内存中进行交换,要快一些,但是内存这个东西,可靠性不如磁盘。所以性能方面比MapReduce要好。
DAG计算模型在迭代计算上还是比MapReduce的效率更高。
2)DAG有向无环图
spark中具有DAG有向无环图,DAG有向无环图在此过程中减少了shuffle以及落地磁盘的次数。
Spark 计算比 MapReduce 快的根本原因在于 DAG 计算模型。一般而言,DAG 相比MapReduce 在大多数情况下可以减少 shuffle 次数。Spark 的 DAGScheduler 相当于一个改进版的 MapReduce,如果计算不涉及与其他节点进行数据交换,Spark 可以在内存中一次性完成这些操作,也就是中间结果无须落盘,减少了磁盘 IO 的操作。但是,如果计算过程中涉及数据交换,Spark 也是会把 shuffle 的数据写磁盘的!有一个误区,Spark 是基于内存的计算,所以快,这不是主要原因,要对数据做计算,必然得加载到内存,Hadoop 也是如此,只不过 Spark 支持将需要反复用到的数据给 Cache 到内存中,减少数据加载耗时,所以 Spark 跑机器学习算法比较在行(需要对数据进行反复迭代)。Spark 基于磁盘的计算也是比 Hadoop 快。刚刚提到了 Spark 的 DAGScheduler 是个改进版的 MapReduce,所以 Spark天生适合做批处理的任务。Hadoop 的 MapReduce 虽然不如 spark 性能好,但是 HDFS 仍然是业界的大数据存储标准。
3)粗粒度资源申请
spark是粗粒度资源申请,也就是当提交spark application的时候,application会将所有的资源申请完毕,如果申请不到资源就等待,如果申请到资源才执行application,task在执行的时候就不需要自己去申请资源,task执行快,当最后一个task执行完之后task才会被释放。
优点是执行速度快,缺点是不能使集群得到充分的利用。
MapReduce是细粒度资源申请,当提交application的时候,task执行时,自己申请资源,自己释放资源,task执行完毕之后,资源立即会被释放,task执行的慢,application执行的相对比较慢。优点是集群资源得到充分利用,缺点是application执行的相对比较慢。
(3)问题扩展
Hive是基于MapReduce的支持类Sql语句的数据仓库工具。对于 ETL 而言,Hive 是一个强大的工具,而对于 Hadoop,它既是数据仓库,也是 Hadoop 的数据库。不过,相对于传统的数据库,它是相对缓慢的。它没有提供所有的 SQL 特性,甚至没有提供与传统的数据库相同的数据库特性。但它支持 SQL,它的确像一个数据库那样工作,它让更多的人(即使那些不是程序员的人)可以获得 Hadoop 技术。
要建立一个主数据管理系统?你可以利用 Hive。要建立一个数据仓库?你也可以利用 Hive。如果你知道 SQL,那么也推荐你使用Hive进行ETL。
(4)结合项目中使用
公司在技术人员储备满足的情况下,同样的业务处理,优先选择spark来进行实现,这样对统计分析的执行效率会有很大的提升。