Hadoop 和 Spark 都是apache基金会下、在大数据架构中广泛使用的开源框架,两个框架都各自有各自的开源技术生态系统,用于准备、处理、管理和分析大数据集。
Hadoop 生态系统由四个主要模块组成:
HDFS): Hadoop的数据存储系统,用于管理运行在普通硬件上的大型数据集,提供高吞吐量的数据访问和高容错性。
YARN : 集群资源管理器,它为应用程序安排任务并分配资源(例如 CPU 和内存)。
Hadoop MapReduce: 将大型数据处理任务拆分为小型任务,再将小型任务分布在不同的节点上运行;
Hadoop Common (Hadoop Core) : 其他三个模块所依赖的一组通用库和实用程序
Spark生态圈包括:
Spark Core: 底层执行引擎,用于调度和分派任务,协调I/O操作,内存管理等;
Spark SQL: 处理结构化数据;
Spark streaming:实时流处理引擎,Spark Streaming 从不同的数据源获取数据,并将其划分为微批处理以形成连续的流,将处理后的结果输出到HDFS、关系型数据库等;
机器学习库(MLlib) : 一组机器学习算法,以及用于特征选择和构建机器学习管道的工具;
GraphX: 提供图计算能力,支持交互式构建、修改和分析可伸缩的图形结构数据。
Spark 是基于 Hadoop MapReduce 的增强。Spark 和 MapReduce 的主要区别在于,Spark 将中间结果保存在内存以提高处理速度,而 MapReduce 的中间结果保存在HDFS磁盘上。因此,对于较小的工作负载,Spark 的数据处理速度比 MapReduce 快。
此外,与 MapReduce 中的两阶段执行过程不同,Spark 创建了一个有向无环图(DAG)来调度任务并利用Hadoop 集群中节点的编排。这个任务跟踪过程支持容错,容错将记录的操作重新应用于来自以前状态的数据。
总结对比:
性能: Spark 更快,因为它使用内存而不是磁盘来保存中间结果。
成本: Hadoop 的运行成本较低,因为它依赖于普通磁盘存储进行数据处理;Spark 的运行成本更高,它依赖于内存进行实时数据处理,这需要使用大量的 RAM 做中转节点。
场景: Hadoop 适用于批处理和线性数据处理,spark适用于实时处理和处理实时非结构化数据流。
可伸缩性: 当数据量快速增长时,Hadoop 通过 HDFS快速扩展以满足需求。反过来,Spark 依赖于容错 HDFS 来处理大量数据。
安全性: Spark 通过共享秘密或事件日志来增强身份验证的安全性,而 Hadoop 使用多种身份验证和访问控制方法。综合来讲,Hadoop 更安全。 Spark可以通过与 Hadoop 集成以达到更高的安全级别。
机器学习(ML) : Spark更胜一筹,因为它包括 MLlib;它通过内存 进行ML 计算,还包括回归、聚类、评估等工具。
在实际应用中,spark能很好融入hadoop的生态圈,Spark 替代 Hadoop 中的 MapReduce 计算模型,存储大多仍然使用 HDFS,且使用YARN 实现资源调度管理。