Hadoop和Spark的相同点和不同点?

2021-04-06 19:14发布

18条回答
啦啦啦
2楼 · 2021-04-07 10:42
  1. 解决问题的层面不一样

    首先,Hadoop和Apache Spark两者都是大数据框架,但是各自存在的目的不尽相同。Hadoop实质上更多是一个分布式数据基础设施: 它将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储,意味着您不需要购买和维护昂贵的服务器硬件,Hadoop还会索引和跟踪这些数据,让大数据处理和分析效率达到前所未有的高度;Spark,则是那么一个专门用来对那些分布式存储的大数据进行处理的工具,它并不会进行分布式数据的存储。

  2. 两者可合可分

    Hadoop除了提供了一个为大家所共识的HDFS分布式数据存储功能之外,还提供了叫做MapReduce的数据处理功能,所以我们完全可以抛开Spark,使用Hadoop自身的MapReduce来完成数据的处理;Spark也不是非要依附在Hadoop身上才能生存,但如上所述,毕竟它没有提供文件管理系统,所以它必须和其他的分布式文件系统进行集成才能运作,这里我们可以选择Hadoop的HDFS,也可以选择其他的基于云的数据系统平台,但Spark默认来说还是被用在Hadoop上面的,毕竟大家都认为它们的结合是最好的。

  3. Spark数据处理速度秒杀MapReduce

    Spark因为其处理数据的方式不一样,会比MapReduce快上很多,MapReduce是分步对数据进行处理的: “从集群中读取数据,进行一次处理,将结果写到集群,从集群中读取更新后的数据,进行下一次的处理,将结果写到集群,等等” Booz Allen Hamilton的数据科学家Kirk Borne如此解析;反观Spark,它会在内存中以接近“实时”的时间完成所有的数据分析:“从集群中读取数据,完成所有必须的分析处理,将结果写回集群,最终完成” ,Spark的批处理速度比MapReduce快近10倍,内存中的数据分析速度则快近100倍,如果需要处理的数据和结果需求大部分情况下是静态的,且你也有耐心等待批处理的完成的话,MapReduce的处理方式也是完全可以接受的,但如果你需要对流数据进行分析,比如那些来自于工厂的传感器收集回来的数据,又或者说你的应用是需要多重数据处理的,那么你也许更应该使用Spark进行处理,大部分机器学习算法都是需要多重数据处理的,此外,通常会用到Spark的应用场景有以下方面:实时的市场活动,在线产品推荐,网络安全分析,机器日记监控等。

  4. 4

    灾难恢复

    两者的灾难恢复方式迥异,但是都很不错。因为Hadoop将每次处理后的数据都写入到磁盘上,所以其天生就能很有弹性的对系统错误进行处理;Spark的数据对象存储在分布于数据集群中的叫做弹性分布式数据集(RDD: Resilient Distributed Dataset)中,这些数据对象既可以放在内存,也可以放在磁盘,所以RDD同样也可以提供完成的灾难恢复功能。

    END

经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。


20200921文 - 做更棒的自己!
3楼 · 2021-04-07 11:05

Spark:专为大规模数据处理而设计的快速通用的计算引擎,是一种与 Hadoop 相似的开源集群计算环境,拥有Hadoop MapReduce所具有的优点,Spark是MapReduce的替代方案,而且兼容HDFS、Hive,可融入Hadoop的生态系统,以弥补MapReduce的不足。

Spark主要用于大数据的计算,而Hadoop以后主要用于大数据的存储(比如HDFS、Hive、HBase等),以及资源调度(Yarn)。Spark+Hadoop,是目前大数据领域最热门的组合


三岁奶猫
4楼 · 2021-04-07 13:45

诞生的先后顺序,hadoop属于第一代开源大数据处理平台,而spark属于第二代

属于下一代的spark肯定在综合评价上要优于第一代的hadoop

spark和hadoop在分布式计算的底层思路上,其实是极为相似的,即mapreduce分布式运算模型:将运算分成两个阶段,阶段1-map,负责从上游拉取数据后各自运算,然后将运算结果shuffle给下游的reduce,reduce再各自对通过shuffle读取来的数据进行聚合运算

spark和hadoop在分布式计算的具体实现上,又有区别;hadoop中的mapreduce运算框架,一个运算job,进行一次map-reduce的过程;而spark的一个job中,可以将多个map-reduce过程级联进行

spark和hadoop的另一个区别是,spark是一个运算平台,而hadoop是一个复合平台(包含运算引擎,还包含分布式文件存储系统,还包含分布式运算的资源调度系统),所以,spark跟hadoop来比较的话,主要是比运算这一块

大数据技术发展到目前这个阶段,hadoop(主要是说它的运算部分)日渐式微,而spark目前如日中天,相关技术需求量大,offer好拿,薪资相对更高


灰机带翅膀
5楼 · 2021-04-07 14:10

1 速度

(1)spark把运算的中间数据存放在内存,迭代计算效率更高;


(2)mapreduce的中间结果需要保存到磁盘, 这样必然会有磁盘io操做,影响性能。


2 容错性

(1)spark容错性高,它通过弹性分布式数据集RDD来实现高效容错,RDD是一组分布式的存储在节点内存中的只读性质的数据集,这些集合是弹性的,某一部分丢失或者出错,可以通过整个数据集的计算流程的血缘关系来实现重建;


(2)mapreduce的容错可能只能重新计算了,成本较高。


3 适用性

(1)spark更加通用,spark提供了transformation和action这两大类的多个功能API,另外还有流式处理 sparkstreaming模块、图计算GraphX等等;


(2)mapreduce只提供了map和reduce两种操作,流计算以及其他模块的支持比较缺乏。


4 框架和生态

(1)Spark框架和生态更为复杂适用范围更广,首先由RDD、血缘lineage、执行时的有向无环图DAG、stage划分等等,很多时候spark作业都需要根据不同的业务场景的需要进行调优,以达到性能要求。


(2)MR框架及其生态相对较为简单,对性能的要求也相对较弱,但是运行较为稳定,适合长期后台运行以及离线海量数据挖掘计算。


ZGSYT
6楼 · 2021-04-07 16:13
  1. 首先,Hadoop和Apache Spark两者都是大数据框架,但是各自存在的目的不尽相同。Hadoop实质上更多是一个分布式数据基础设施: 它将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储,意味着您不需要购买和维护昂贵的服务器硬件,Hadoop还会索引和跟踪这些数据,让大数据处理和分析效率达到前所未有的高度;Spark,则是那么一个专门用来对那些分布式存储的大数据进行处理的工具,它并不会进行分布式数据的存储。

  2. 两者可合可分

    Hadoop除了提供了一个为大家所共识的HDFS分布式数据存储功能之外,还提供了叫做MapReduce的数据处理功能,所以我们完全可以抛开Spark,使用Hadoop自身的MapReduce来完成数据的处理;Spark也不是非要依附在Hadoop身上才能生存,但如上所述,毕竟它没有提供文件管理系统,所以它必须和其他的分布式文件系统进行集成才能运作,这里我们可以选择Hadoop的HDFS,也可以选择其他的基于云的数据系统平台,但Spark默认来说还是被用在Hadoop上面的,毕竟大家都认为它们的结合是最好的。

  3. Spark数据处理速度秒杀MapReduce

    Spark因为其处理数据的方式不一样,会比MapReduce快上很多,MapReduce是分步对数据进行处理的: “从集群中读取数据,进行一次处理,将结果写到集群,从集群中读取更新后的数据,进行下一次的处理,将结果写到集群,等等” Booz Allen Hamilton的数据科学家Kirk Borne如此解析;反观Spark,它会在内存中以接近“实时”的时间完成所有的数据分析:“从集群中读取数据,完成所有必须的分析处理,将结果写回集群,最终完成” ,Spark的批处理速度比MapReduce快近10倍,内存中的数据分析速度则快近100倍,如果需要处理的数据和结果需求大部分情况下是静态的,且你也有耐心等待批处理的完成的话,MapReduce的处理方式也是完全可以接受的,但如果你需要对流数据进行分析,比如那些来自于工厂的传感器收集回来的数据,又或者说你的应用是需要多重数据处理的,那么你也许更应该使用Spark进行处理,大部分机器学习算法都是需要多重数据处理的,此外,通常会用到Spark的应用场景有以下方面:实时的市场活动,在线产品推荐,网络安全分析,机器日记监控等。

  4. 4

    灾难恢复

    两者的灾难恢复方式迥异,但是都很不错。因为Hadoop将每次处理后的数据都写入到磁盘上,所以其天生就能很有弹性的对系统错误进行处理;Spark的数据对象存储在分布于数据集群中的叫做弹性分布式数据集(RDD: Resilient Distributed Dataset)中,这些数据对象既可以放在内存,也可以放在磁盘,所以RDD同样也可以提供完成的灾难恢复功能。

    END

经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。


Spark和Hadoop的异同点分析

一、两者实现原理的比较

二、 两者多方面的对比

三、Spark和MR两者之间的详细对比分析(重点)

3.1 速度

3.2 容错性

3.3 适用性

3.4 框架和生态

3.5 运行环境

四、三大分布式计算框架系统

(1)Spark:是分布式计算平台,是一个用scala语言编写的计算框架,基于内存的快速、通用、可扩展的大数据分析引擎 。


(2)Hadoop:是分布式管理、存储、计算的生态系统;

其中包括三大部分:HDFS(存储)、MapReduce(计算)、Yarn(资源调度)


一、两者实现原理的比较

1、Hadoop和Spark都是并行计算,两者都是用MR模型进行计算 。Hadoop一个作业称为一个Job,Job里面分为Map Task和Reduce Task阶段,每个Task都在自己的进程中运行,当Task结束时,进程也会随之结束。


2、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可以快速启动读取内存进行计算。


所以,spark比MR快的原因也在这,MR启动就需要申请资源,用完就销毁,但是spark把进程拿到以后,这个进程会一直存在,即使没有job在跑,所以后边的job可以直接启动,不需要再重新申请资源。


注意:一个Application ——> 多个job ——>一个job多个stage ——> 一个stage多个task


二、 两者多方面的对比

(1)Spark对标于Hadoop中的计算模块MR,但是速度和效率比MR要快得多;


(2)Spark没有提供文件管理系统,所以,它必须和其他的分布式文件系统进行集成才能运作,它只是一个计算分析框架,专门用来对分布式存储的数据进行计算处理,它本身并不能存储数据;


(3)Spark可以使用Hadoop的HDFS或者其他云数据平台进行数据存储,但是一般使用HDFS来进行存储;


(4)Spark可以使用基于HDFS的HBase数据库,也可以使用HDFS的数据文件,还可以通过jdbc连接使用Mysql数据库数据;Spark可以对数据库数据进行修改删除,而HDFS只能对数据进行追加和全表删除;


(5)Spark数据处理速度秒杀Hadoop中MR;


(6)Spark处理数据的设计模式与MR不一样,Hadoop是从HDFS读取数据,通过MR将中间结果写入HDFS;然后再重新从HDFS读取数据进行MR,再刷写到HDFS,这个过程涉及多次落盘操作,多次磁盘IO,效率并不高;而Spark的设计模式是读取集群中的数据后,在内存中存储和运算,直到全部运算完毕后,再存储到集群中;


(7)Spark是由于Hadoop中MR效率低下而产生的高效率快速计算引擎,批处理速度比MR快近10倍,内存中的数据分析速度比Hadoop快近100倍(源自官网描述);


(8)Spark中RDD一般存放在内存中,如果内存不够存放数据,会同时使用磁盘存储数据;通过RDD之间的血缘连接、数据存入内存中切断血缘关系等机制,可以实现灾难恢复,当数据丢失时可以恢复数据;这一点与Hadoop类似,Hadoop基于磁盘读写,天生数据具备可恢复性;


(9)Spark引进了内存集群计算的概念,可在内存集群计算中将数据集缓存在内存中,以缩短访问延迟;


(10)Spark中通过DAG有向无环图可以实现良好的容错。


三、Spark和MR两者之间的详细对比分析(重点)

3.1 速度

(1)spark把运算的中间数据存放在内存,迭代计算效率更高;


(2)mapreduce的中间结果需要保存到磁盘, 这样必然会有磁盘io操做,影响性能。


3.2 容错性

(1)spark容错性高,它通过弹性分布式数据集RDD来实现高效容错,RDD是一组分布式的存储在节点内存中的只读性质的数据集,这些集合是弹性的,某一部分丢失或者出错,可以通过整个数据集的计算流程的血缘关系来实现重建;


(2)mapreduce的容错可能只能重新计算了,成本较高。


3.3 适用性

(1)spark更加通用,spark提供了transformation和action这两大类的多个功能API,另外还有流式处理 sparkstreaming模块、图计算GraphX等等;


(2)mapreduce只提供了map和reduce两种操作,流计算以及其他模块的支持比较缺乏。


3.4 框架和生态

(1)Spark框架和生态更为复杂适用范围更广,首先由RDD、血缘lineage、执行时的有向无环图DAG、stage划分等等,很多时候spark作业都需要根据不同的业务场景的需要进行调优,以达到性能要求。


(2)MR框架及其生态相对较为简单,对性能的要求也相对较弱,但是运行较为稳定,适合长期后台运行以及离线海量数据挖掘计算。


3.5 运行环境

(1)spark大致有四种运行模式:


local:本地运行

standalone:使用Spark自带的资源管理框架,运行spark的应用(常用)

yarn:将spark应用类似mr一样,提交到yarn上运行 (常用)

mesos:类似yarn的一种资源管理框架


(2)MR运行在YARN上


四、三大分布式计算框架系统

(1)Mapreduce适合处理海量离线的静态数据;


(2)Spark对实时的数据做批处理;


(3)Storm/Flink对实时在线的数据做流式处理。


浅浅77
8楼 · 2021-04-07 16:36

(1)Spark:是分布式计算平台,是一个用scala语言编写的计算框架,基于内存的快速、通用、可扩展的大数据分析引擎 。


(2)Hadoop:是分布式管理、存储、计算的生态系统;

其中包括三大部分:HDFS(存储)、MapReduce(计算)、Yarn(资源调度)


一、两者实现原理的比较

1、Hadoop和Spark都是并行计算,两者都是用MR模型进行计算 。Hadoop一个作业称为一个Job,Job里面分为Map Task和Reduce Task阶段,每个Task都在自己的进程中运行,当Task结束时,进程也会随之结束。


2、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可以快速启动读取内存进行计算。


所以,spark比MR快的原因也在这,MR启动就需要申请资源,用完就销毁,但是spark把进程拿到以后,这个进程会一直存在,即使没有job在跑,所以后边的job可以直接启动,不需要再重新申请资源。


注意:一个Application ——> 多个job ——>一个job多个stage ——> 一个stage多个task


二、 两者多方面的对比

(1)Spark对标于Hadoop中的计算模块MR,但是速度和效率比MR要快得多;


(2)Spark没有提供文件管理系统,所以,它必须和其他的分布式文件系统进行集成才能运作,它只是一个计算分析框架,专门用来对分布式存储的数据进行计算处理,它本身并不能存储数据;


(3)Spark可以使用Hadoop的HDFS或者其他云数据平台进行数据存储,但是一般使用HDFS来进行存储;


(4)Spark可以使用基于HDFS的HBase数据库,也可以使用HDFS的数据文件,还可以通过jdbc连接使用Mysql数据库数据;Spark可以对数据库数据进行修改删除,而HDFS只能对数据进行追加和全表删除;


(5)Spark数据处理速度秒杀Hadoop中MR;


(6)Spark处理数据的设计模式与MR不一样,Hadoop是从HDFS读取数据,通过MR将中间结果写入HDFS;然后再重新从HDFS读取数据进行MR,再刷写到HDFS,这个过程涉及多次落盘操作,多次磁盘IO,效率并不高;而Spark的设计模式是读取集群中的数据后,在内存中存储和运算,直到全部运算完毕后,再存储到集群中;


(7)Spark是由于Hadoop中MR效率低下而产生的高效率快速计算引擎,批处理速度比MR快近10倍,内存中的数据分析速度比Hadoop快近100倍(源自官网描述);


(8)Spark中RDD一般存放在内存中,如果内存不够存放数据,会同时使用磁盘存储数据;通过RDD之间的血缘连接、数据存入内存中切断血缘关系等机制,可以实现灾难恢复,当数据丢失时可以恢复数据;这一点与Hadoop类似,Hadoop基于磁盘读写,天生数据具备可恢复性;


(9)Spark引进了内存集群计算的概念,可在内存集群计算中将数据集缓存在内存中,以缩短访问延迟;


(10)Spark中通过DAG有向无环图可以实现良好的容错。


三、Spark和MR两者之间的详细对比分析(重点)

3.1 速度

(1)spark把运算的中间数据存放在内存,迭代计算效率更高;


(2)mapreduce的中间结果需要保存到磁盘, 这样必然会有磁盘io操做,影响性能。


3.2 容错性

(1)spark容错性高,它通过弹性分布式数据集RDD来实现高效容错,RDD是一组分布式的存储在节点内存中的只读性质的数据集,这些集合是弹性的,某一部分丢失或者出错,可以通过整个数据集的计算流程的血缘关系来实现重建;


(2)mapreduce的容错可能只能重新计算了,成本较高。


3.3 适用性

(1)spark更加通用,spark提供了transformation和action这两大类的多个功能API,另外还有流式处理 sparkstreaming模块、图计算GraphX等等;


(2)mapreduce只提供了map和reduce两种操作,流计算以及其他模块的支持比较缺乏。


3.4 框架和生态

(1)Spark框架和生态更为复杂适用范围更广,首先由RDD、血缘lineage、执行时的有向无环图DAG、stage划分等等,很多时候spark作业都需要根据不同的业务场景的需要进行调优,以达到性能要求。


(2)MR框架及其生态相对较为简单,对性能的要求也相对较弱,但是运行较为稳定,适合长期后台运行以及离线海量数据挖掘计算。


3.5 运行环境

(1)spark大致有四种运行模式:


local:本地运行

standalone:使用Spark自带的资源管理框架,运行spark的应用(常用)

yarn:将spark应用类似mr一样,提交到yarn上运行 (常用)

mesos:类似yarn的一种资源管理框架


(2)MR运行在YARN上


四、三大分布式计算框架系统

(1)Mapreduce适合处理海量离线的静态数据;


(2)Spark对实时的数据做批处理;


(3)Storm/Flink对实时在线的数据做流式处理。


只爱泡泡的哆啦A梦呀
9楼 · 2021-04-07 17:00
  1. 解决问题的层面不一样

    首先,Hadoop和Apache Spark两者都是大数据框架,但是各自存在的目的不尽相同。Hadoop实质上更多是一个分布式数据基础设施: 它将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储,意味着您不需要购买和维护昂贵的服务器硬件,Hadoop还会索引和跟踪这些数据,让大数据处理和分析效率达到前所未有的高度;Spark,则是那么一个专门用来对那些分布式存储的大数据进行处理的工具,它并不会进行分布式数据的存储。

  2. 两者可合可分

    Hadoop除了提供了一个为大家所共识的HDFS分布式数据存储功能之外,还提供了叫做MapReduce的数据处理功能,所以我们完全可以抛开Spark,使用Hadoop自身的MapReduce来完成数据的处理;Spark也不是非要依附在Hadoop身上才能生存,但如上所述,毕竟它没有提供文件管理系统,所以它必须和其他的分布式文件系统进行集成才能运作,这里我们可以选择Hadoop的HDFS,也可以选择其他的基于云的数据系统平台,但Spark默认来说还是被用在Hadoop上面的,毕竟大家都认为它们的结合是最好的。

  3. Spark数据处理速度秒杀MapReduce

    Spark因为其处理数据的方式不一样,会比MapReduce快上很多,MapReduce是分步对数据进行处理的: “从集群中读取数据,进行一次处理,将结果写到集群,从集群中读取更新后的数据,进行下一次的处理,将结果写到集群,等等” Booz Allen Hamilton的数据科学家Kirk Borne如此解析;反观Spark,它会在内存中以接近“实时”的时间完成所有的数据分析:“从集群中读取数据,完成所有必须的分析处理,将结果写回集群,最终完成” ,Spark的批处理速度比MapReduce快近10倍,内存中的数据分析速度则快近100倍,如果需要处理的数据和结果需求大部分情况下是静态的,且你也有耐心等待批处理的完成的话,MapReduce的处理方式也是完全可以接受的,但如果你需要对流数据进行分析,比如那些来自于工厂的传感器收集回来的数据,又或者说你的应用是需要多重数据处理的,那么你也许更应该使用Spark进行处理,大部分机器学习算法都是需要多重数据处理的,此外,通常会用到Spark的应用场景有以下方面:实时的市场活动,在线产品推荐,网络安全分析,机器日记监控等。

  4. 4

    灾难恢复

    两者的灾难恢复方式迥异,但是都很不错。因为Hadoop将每次处理后的数据都写入到磁盘上,所以其天生就能很有弹性的对系统错误进行处理;Spark的数据对象存储在分布于数据集群中的叫做弹性分布式数据集(RDD: Resilient Distributed Dataset)中,这些数据对象既可以放在内存,也可以放在磁盘,所以RDD同样也可以提供完成的灾难恢复功能。