首页 > 编程知识 正文

超详细:大数据框架Spark和Hadoop了解及对比

时间:2023-05-03 13:27:53 阅读:284469 作者:2512

谈到大数据框架,现在最火的就是Hadoop和Spark,但我们往往对它们的理解只是提留在字面上,并没有对它们进行深入的思考,倒底现在业界都在使用哪种技术?二者间究竟有哪些异同?它们各自解决了哪些问题?也总有人会问这两者谁更好的问题,而事实上,在设计之初,Hadoop和Spark是为了实现在同一个团队内的协同运行,而不是非要分出个谁优谁劣。Hadoop与Spark之间,各自有各自的优势和不足,共同运用起来才能更好地完成大数据的处理。

一、介绍

Hadoop
Hadoop,是分布式管理、存储、计算的生态系统,也可以被理解为是一种软件库和框架,包括HDFS(存储)、MapReduce(计算)、Yarn(资源调度)。可以实现更简单的编程,跨计算机集群对庞大数据集(大数据)进行分布式处理,从单一计算机系统,到提供本地存储和计算能力的数千个商用系统,它都能轻松支持。Hadoop由协同运行、构建Hadoop框架的多个模块组成,共同完成数据处理任务。

Spark
Spark,是分布式计算平台,是一个用scala语言编写的计算框架,基于内存的快速、通用、可扩展的一种用于数据大规模处理的大数据分析引擎,Spark的内存处理技术使得大量数据的实时处理任务能够更快的计算完成,还能实现数据批处理,相比于Hadoop自身的MapReduce,Spark在实时数据处理上做出了补充和完善。

二、异同

解决问题的层面不一样
首先,Hadoop和Apache Spark两者都是大数据框架,但是各自存在的目的不尽相同。Hadoop实质上更多是一个分布式数据基础设施: 它将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储,意味着您不需要购买和维护昂贵的服务器硬件,Hadoop还会索引和跟踪这些数据,让大数据处理和分析效率达到前所未有的高度;
Spark没有提供文件管理系统,所以,它必须和其他的分布式文件系统进行集成才能运作,它只是一个计算分析框架,专门用来对分布式存储的数据进行计算处理,它本身并不会进行分布式数据的存储。

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

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

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

三、Spark相对Hadoop的优越性

(1)Spark基于RDD,数据并不存放在RDD中,只是通过RDD进行转换,通过装饰者设计模式,数据之间形成血缘关系和类型转换;

(2)Spark用scala语言编写,相比java语言编写的Hadoop程序更加简洁;

(3)相比Hadoop中对于数据计算只提供了Map和Reduce两个操作,Spark提供了丰富的算子,可以通过RDD转换算子和RDD行动算子,实现很多复杂算法操作,这些在复杂的算法在Hadoop中需要自己编写,而在Spark中直接通过scala语言封装好了,直接用就ok;

(4)Hadoop中对于数据的计算,一个Job只有一个Map和Reduce阶段,对于复杂的计算,需要使用多次MR,这样涉及到落盘和磁盘IO,效率不高;而在Spark中,一个Job可以包含多个RDD的转换算子,在调度时可以生成多个Stage,实现更复杂的功能;

(5)Hadoop中中间结果存放在HDFS中,每次MR都需要刷写-调用,而Spark中间结果存放优先存放在内存中,内存不够再存放在磁盘中,不放入HDFS,避免了大量的IO和刷写读取操作;

(6)Hadoop适合处理静态数据,对于迭代式流式数据的处理能力差;Spark通过在内存中缓存处理的数据,提高了处理流式数据和迭代式数据的性能;

四、适用数据

Hadoop适合处理离线的静态的大数据;

Spark适合处理离线的流式的大数据;

此外分布式计算系统还有Storm/Flink,适合处理在线的实时的大数据。

参考文献:
Spark【官方文档】
Spark和Hadoop的区别和比较
Hadoop和Spark的异同

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。