Spark 和 Hadoop 以及区别
1. Spark 是什么?
Spark,是一种通用的大数据计算框架,正如传统大数据技术 Hadoop 的 MapReduce、Hive 引擎,以及 Storm 流式实时计算引擎等。
Spark 包含了大数据领域常见的各种计算框架:比如 Spark Core 用于离线计算,Spark SQL 用于交互式查询,Spark Streaming 用于实时流式计算,Spark MLlib 用于机器学习,Spark GraphX 用于图计算。
Spark 主要用于大数据的计算,而 Hadoop 以后主要用于大数据的存储(比如 HDFS、Hive、HBase 等),以及资源调度(Yarn)。
2.Spark 整体架构
Spark 的特点:
速度快:Spark 基于内存进行计算(当然也有部分计算基于磁盘,比如 shuffle)。
容易上手开发:Spark 的基于 RDD 的计算模型,比 Hadoop 的基于 Map-Reduce 的计算模型要更加易于理解,更加易于上手开发,实现各种复杂功能,比如二次排序、topn 等复杂操作时,更加便捷。
超强的通用性:Spark 提供了 Spark RDD、Spark SQL、Spark Streaming、Spark MLlib、Spark GraphX 等技术组件,可以一站式地完成大数据领域的离线批处理、交互式查询、流式计算、机器学习、图计算等常见的任务。
集成 Hadoop:Spark 并不是要成为一个大数据领域的“独裁者”,一个人霸占大数据领域所有的“地盘”,而是与 Hadoop 进行了高度的集成,两者可以完美的配合使用。大数据培训Hadoop 的 HDFS、Hive、HBase 负责存储,YARN 负责资源调度;Spark 复杂大数据计算。实际上,Hadoop+Spark 的组合,是一种“double win”的组合。
极高的活跃度:Spark 目前是 Apache 基金会的顶级项目,全世界有大量的优秀工程师是 Spark 的 committer。并且世界上很多顶级的 IT 公司都在大规模地使用 Spark。
Hadoop 是什么?
Hadoop 是项目的总称。主要是由 HDFS 和 MapReduce 组成。HDFS 是 Google File System(GFS)的开源实现。MapReduce 是 Google MapReduce 的开源实现。 具体而言,Apache Hadoop 软件库是一个允许使用简单编程模型跨计算机集群处理大型数据集合的框架,其设计的初衷是将单个服务器扩展成上千个机器组成的一个集群为大数据提供计算服务,其中每个机器都提供本地计算和存储服务。
Hadoop 的核心:
1.HDFS 和 MapReduce 是 Hadoop 的两大核心。通过 HDFS 来实现对分布式储存的底层支持,达到高速并行读写与大容量的储存扩展。
2.通过 MapReduce 实现对分布式任务进行处理程序支持,保证高速分区处理数据。
MapReduce 的计算模型分为 Map 和 Reduce 两个过程。在日常经验里,我们统计数据需要分类,分类越细、参与统计的人数越多,计算的时间就越短,这就是 Map 的形象比喻,在大数据计算中,成百上千台机器同时读取目标文件的各个部分,然后对每个部分的统计量进行计算,Map 就是负责这一工作的;而 Reduce 就是对分类计数之后的合计,是大数据计算的第二阶段。可见,数据的计算过程就是在 HDFS 基础上进行分类汇总。
HDFS 把节点分成两类:NameNode 和 DataNode。NameNode 是唯一的,程序与之通信,然后从 DataNode 上存取文件。这些操作是透明的,与普通的文件系统 API 没有区别。
MapReduce 则是 JobTracker 节点为主,分配工作以及负责和用户程序通信。
Spark 和 Hadoop 的区别和比较:
1.原理比较:
Hadoop 和 Spark 都是并行计算,两者都是用 MR 模型进行计算
Hadoop 一个作业称为一个 Job,Job 里面分为 Map Task 和 Reduce Task 阶段,每个 Task 都在自己的进程中运行,当 Task 结束时,进程也会随之结束;
Spark 用户提交的任务称为 application,一个 application 对应一个 SparkContext,app 中存在多个 job,每触发一次 action 操作就会产生一个 job。这些 job 可以并行或串行执行,每个 job 中有多个 stage,stage 是 shuffle 过程中 DAGScheduler 通过 RDD 之间的依赖关系划分 job 而来的,每个 stage 里面有多个 task,组成 taskset,由 TaskScheduler 分发到各个 executor 中执行;executor 的生命周期是和 app 一样的,即使没有 job 运行也是存在的,所以 task 可以快速启动读取内存进行计算。
2.数据的存储和处理:
hadoop:
Hadoop 实质上更多是一个分布式系统基础架构: 它将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储,同时还会索引和跟踪这些数据,大幅度提升大数据处理和分析效率。Hadoop 可以独立完成数据的存储和处理工作,因为其除了提供 HDFS 分布式数据存储功能,还提供 MapReduce 数据处理功能。
spark:
Spark 是一个专门用来对那些分布式存储的大数据进行处理的工具,没有提供文件管理系统,自身不会进行数据的存储。它必须和其他的分布式文件系统进行集成才能运作。可以选择 Hadoop 的 HDFS,也可以选择其他平台。
3.处理速度:
hadoop:
Hadoop 是磁盘级计算,计算时需要在磁盘中读取数据;其采用的是 MapReduce 的逻辑,把数据进行切片计算用这种方式来处理大量的离线数据.
spark:
Spark,它会在内存中以接近“实时”的时间完成所有的数据分析。Spark 的批处理速度比 MapReduce 快近 10 倍,内存中的数据分析速度则快近 100 倍。
4.恢复性:
hadoop:
Hadoop 将每次处理后的数据写入磁盘中,对应对系统错误具有天生优势。
spark:
Spark 的数据对象存储在弹性分布式数据集(RDD:)中。“这些数据对象既可放在内存,也可以放在磁盘,所以 RDD 也提供完整的灾难恢复功能。
5.处理数据:
hadoop:
Hadoop 适合处理静态数据,对于迭代式流式数据的处理能力差;
spark:
Spark 通过在内存中缓存处理的数据,提高了处理流式数据和迭代式数据的性能;
6.中间结果:
hadoop:
Hadoop 中中间结果存放在 HDFS 中,每次 MR 都需要刷写-调用,
spark:
而 Spark 中间结果存放优先存放在内存中,内存不够再存放在磁盘中,不放入 HDFS,避免了大量的 IO 和刷写读取操作;
三大分布式计算系统:
Hadoop 适合处理离线的静态的大数据;
Spark 适合处理离线的流式的大数据;
Storm/Flink 适合处理在线的实时的大数据。
评论