vlambda博客
学习文章列表

阿里面试题:Hadoop和Spark的区别和联系

阅读本文前,请您先点击上面的“蓝色字体”,再点击关注,这样您就可以每天学习一点新知识,每天都有进步了。

Hadoop

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。Hadoop实现了一个分布式文件系统HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的硬件上;而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。


hadoop优点

Hadoop 以一种可靠、高效、可伸缩的方式进行数据处理。

  • 可靠性: Hadoop将数据存储在多个备份,Hadoop提供高吞吐量来访问应用程序的数据。

  • 高扩展性:Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。

  • 高效性 Hadoop以并行的方式工作,通过并行处理加快处理速度。

  • 高容错性 Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。

  • 低成本 Hadoop能够部署在低廉的(low-cost)硬件上。


Spark

Spark是专为大规模数据处理而设计的快速通用的计算引擎。Spark拥有Hadoop MapReduce所具有的优点,Spark在Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark性能以及运算速度高于MapReduce。


spark优点

  • 计算速度快: 因为spark从磁盘中读取数据,把中间数据放到内存中,,完成所有必须的分析处理,将结果写回集群,所以spark更快。

  • Spark 提供了大量的库: 包括Spark Core、Spark SQL、Spark Streaming、MLlib、GraphX。

  • 支持多种资源管理器: Spark 支持 Hadoop YARN,及其自带的独立集群管理器

  • 操作简单: 高级 API 剥离了对集群本身的关注,Spark 应用开发者可以专注于应用所要做的计算本身


Hadoop和Spark的区别


1. 解决问题的层面不一样

Hadoop和Spark两者都是大数据框架,但是各自存在的目的不尽相同。

  • Hadoop实质上是解决大数据大到无法在一台计算机上进行存储、无法在要求的时间内进行处理的问题,是一个分布式数据基础设施。

  • HDFS,它将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储,通过将块保存到多个副本上,提供高可靠的文件存储。

  • MapReduce,通过简单的Mapper和Reducer的抽象提供一个编程模型,可以在一个由几十台上百台的机器上并发地分布式处理大量数据集,而把并发、分布式和故障恢复等细节隐藏。

  • Hadoop复杂的数据处理需要分解为多个Job(包含一个Mapper和一个Reducer)组成的有向无环图。

  • Spark则允许程序开发者使用有向无环图(DAG)开发复杂的多步数据管道。而且还支持跨有向无环图的内存数据共享,以便不同的作业可以共同处理同一个数据。是一个专门用来对那些分布式存储的大数据进行处理的工具,它并不会进行分布式数据的存储。

  • 可将Spark看作是Hadoop MapReduce的一个替代品而不是Hadoop的替代品。


2. Hadoop的局限和不足

  • 一个Job只有Map和Reduce两个阶段,复杂的计算需要大量的Job完成,Job间的依赖关系由开发人员进行管理。

  • 中间结果也放到HDFS文件系统中。对于迭代式数据处理性能比较差。

  • Reduce Task需要等待所有的Map Task都完成后才开始计算。

  • 时延高,只适用批量数据处理,对于交互式数据处理,实时数据处理的支持不够。


3. 两者可合可分

  • Hadoop除了提供HDFS分布式数据存储功能之外,还提供了MapReduce的数据处理功能。所以我们完全可以抛开Spark,仅使用Hadoop自身的MapReduce来完成数据的处理。

  • 相反,Spark也不是非要依附在Hadoop身上才能生存。但它没有提供文件管理系统,所以,它必须和其他的分布式文件系统进行集成才能运作。我们可以选择Hadoop的HDFS,也可以选择其他的基于云的数据系统平台。但Spark默认来说还是被用在Hadoop上面的,被认为它们的结合是最好的选择。


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

  • Spark因为处理数据的方式不一样,会比MapReduce快上很多。MapReduce是分步对数据进行处理的: “从集群中读取数据,进行一次处理,将结果写到集群,从集群中读取更新后的数据,进行下一次的处理,将结果写到集群,等等…”

  • Spark会在内存中以接近“实时”的时间完成所有的数据分析:“从集群中读取数据,完成所有必须的分析处理(依赖多个算子),将结果写回集群,完成,” Spark的批处理速度比MapReduce快近10倍,内存中的数据分析速度则快近100倍。

  • 如果需要处理的数据和结果需求大部分情况下是静态的,且有充足的时间等待批处理的完成,MapReduce的处理方式也是完全可以接受的。

  • 但如果你需要对时实流数据进行分析,比如来自工厂的传感器收集回来的数据,又或者用户访问网站的日志信息,那么更应该使用Spark进行处理。


5. 灾难恢复机制

  • 两者的灾难恢复方式不同,因为Hadoop将每次处理后的数据都写入到磁盘上,所以其天生就能很有弹性的对系统错误进行处理。

  • Spark的数据对象存储在分布于数据集群中的叫做弹性分布式数据集(RDD: Resilient Distributed Dataset)中。这些数据对象既可以放在内存,也可以放在磁盘,所以RDD同样也可以提供完成的灾难恢复功能。