一、Spark它主要包含以下几个方面:
Spark Core – 用于通用分布式数据处理的引擎。它不依赖于任何其他组件,可以运行在任何商用服务器集群上。
Spark Sql – 运行在Spark上的SQL查询语句,支持一系列SQL函数和HiveQL。但是还不是很成熟,所以不要在生产系统中使用;而HiveQL集成了需要的hive元数据和Hive相关的jar包。
Spark Streaming – 基于spark的微批处理引擎,支持各种各样数据源的导入。唯一依赖的是Spark Core引擎。
MLib – 构建在spark之上的机器学习库,支持一系列数据挖掘算法。
二、Hadoop 组成
Hadoop HDFS:一个高可靠、高吞吐量的分布式文件系统。
Hadoop MapReduce:一个分布式的离线并行计算框架。
Hadoop YARN:作业调度与集群资源管理的框架。
Hadoop Common:支持其他模块的工具模块(Configuration、RPC、序列化机制、日志操作)。
三、hadoop的优势与不足
高可靠性:因为 Hadoop 假设计算元素和存储会出现故障,因为它维护多个工作数据副
本,在出现故障时可以对失败的节点重新分布处理。
高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点。
高效性:在 MapReduce 的思想下,Hadoop 是并行工作的,以加快任务处理速度。
高容错性:自动保存多份副本数据,并且能够自动将失败的任务重新分配。
MapRecue存在以下局限:
1.只提供两个操作,Map和Reduce,表达力欠缺。
2.一个Job只有Map和Reduce两个阶段,复杂的计算需要大量的Job完成,Job之间的依赖关系是由开发者自己管理的。
3.中间结果也放在HDFS文件系统中
4.ReduceTask需要等待所有MapTask都完成后才可以开始延时高,只适用Batch数据处理,对于交互式数据处理,实时数据处理的支持不够 。
四、Spark 是在借鉴了 MapReduce 之上发展而来的,继承了其分布式并行计算的优点并改进了 MapReduce 明显的缺陷;
首先,Spark 把中间数据放到内存中,迭代运算效率高。MapReduce 中计算结果需要落地,保存到磁盘上,这样势必会影响整体速度,而 Spark 支持 DAG 图的分布式并行计算的编程框架,减少了迭代过程中数据的落地,提高了处理效率。(延迟加载)
其次,Spark 容错性高。Spark 引进了弹性分布式数据集 RDD (Resilient DistributedDataset) 的抽象,它是分布在一组节点中的只读对象集合,这些集合是弹性的,如果数据集一部分丢失,则可以根据“血统”(即允许基于数据衍生过程)对它们进行重建。另外在RDD 计算时可以通过 CheckPoint 来实现容错。
最后,Spark 更加通用。mapreduce 只提供了 Map 和 Reduce 两种操作,Spark 提供的数据集操作类型有很多,大致分为:Transformations 和 Actions 两大类。Transformations包括 Map、Filter、FlatMap、Sample、GroupByKey、ReduceByKey、Union、Join、Cogroup、MapValues、Sort 等多种操作类型,同时还提供 Count, Actions 包括 Collect、Reduce、Lookup 和 Save 等操作。
五、Spark和MR计算对比
六、Spark迭代计算过程
总结:
1.MR基于磁盘计算引擎,Spark基于内存计算引擎;
2.Spark可以进行迭代计算,而MR不可以,他只是Map阶段和Reduce阶段!