任何关于大数据和数据分析的讨论,最终都会不可避免地涉及到Hadoop和Spark的相关话题,争议的重点莫过于两者之中哪一方更好用。这个争议可以理解,毕竟两者都是大数据框架中的重要组成部分。那么两者究竟是敌是友,又该如何选择?今天就让我们来寻找答案,解决这个疑惑!


Hadoop 是一个由 Apache 基金会所开发的分布式系统基础架构,它可以使用户在不了解分布式底层细节的情况下开发分布式程序,充分利用集群的威力进行高速运算和存储。


从其定义就可以发现,Hadoop解决了大数据(大到一台计算机无法进行存储,一台计算机无法在要求的时间内进行处理)的可靠存储和处理。也就是 Hadoop 的两大核心:HDFS 和 MapReduce。


HDFS(Hadoop Distributed File System)是可扩展、容错、高性能的分布式文件系统,异步复制,一次写入多次读取,主要负责存储。


MapReduce 为分布式计算框架,包含map(映射)和 reduce(归约)过程,负责在 HDFS 上进行计算。


由于MapReduce的数据流是acyclic(非循环)的,且数据存储在磁盘,这就导致在迭代计算时需要反复进行磁盘读写操作,大大降低了计算效率。而事实上当前机器学习的大多数算法都是迭代算法,因此解决这一问题具有很大的应用价值,Spark的提出,很大程度上是为了解决MapReduce在处理迭代算法上的缺陷。


Spark是一个专门用来对分布式存储数据进行处理的工具,它的计算模式也属于MapReduce,但不局限于Map和Reduce操作,还提供了多种数据集操作类型,编程模型比Hadoop MapReduce更灵活。


Spark提供了内存计算,可将中间结果放到内存中,对于迭代运算效率更高 Spark基于DAG的任务调度执行机制,要优于Hadoop MapReduce的迭代执行机制。


Hadoop 和Spark有什么区别?


Hadoop 和Spark 两者都是大数据框架,但解决问题的层面有所不同。Hadoop更多是一个分布式数据基础设施,将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储,节省了硬件成本 ,而Spark,则是一个专门用来对那些分布式存储数据进行处理的工具,它并不会进行分布式数据的存储。


其次, Spark要比Hadoop的MapReduce计算速度快很多。Spark,它会在内存中以接近“实时”的时间完成所有的数据分析,从集群中读取数据,完成所有必须的分析处理,将结果写回集群。对于动态数据实时分析而言,Spark要比Hadoop性能较为优越。 


Hadoop 和Spark之间的联系


Hadoop除了提供为用户提供所共识的HDFS分布式数据存储功能之外,还提供了叫做MapReduce的数据处理功能。所以这里可以完全抛开Spark,使用Hadoop自身的MapReduce来完成数据的处理。


由于Spark没有提供文件管理系统,所以,它必须和其他的分布式文件系统进行集成才能运作。这个分布式文件系统可以选择Hadoop的HDFS,也可以选择其他的基于云的数据系统平台。


而在实际应用中,Spark大都是被用在Hadoop上面的,因为两者相结合,才能规避掉各自的缺点,完美的展示出自身的优势之处。


—END—


对于Spark和Hadoop最好的比喻,就像是同一个队伍中的队友,它们不是你死我活的关系,而是一种相互共生的关系。


它们各自在不同的领域有着自己的优势和特长,但它们都向着相同的目标而努力。它们并非相互排斥,它们其中之一并不会在功能方面排斥另外一方。如果企业把它们联合起来使用,将能最大化的实现它们的功能价值。

*专家文章为作者独立观点,不代表移动Labs立场. 转载此文章须经作者同意,并请附上出处(移动Labs)及本页链接。

0