Spark和Hadoop到底谁更厉害?
要想搞清楚spark跟Hadoop到底谁更厉害,首先得明白spark到底是什么鬼。
经过之前的介绍大家应该非常了解什么是Hadoop了(不了解的点击这里:白话大数据 | hadoop究竟是什么鬼),简单的说:Hadoop是由HDFS分布式文件系统和MapReduce编程模型等部分组成的分布式系统架构。
而Spark呢,更像是Hadoop MapReduce这样的编程模型。
其实要讲清楚Spark,内存和磁盘这两个概念是必须要弄清楚的,相信在座的老爷太太们都懂,我还是简单说一下吧。内存和磁盘两者都是存储设备, 但内存储存的是我们正在使用的资源,磁盘储存的是我们暂时用不到的资源。磁盘就像这个仓库,而内存就像进出仓库的通道,其实也不完全是这样啦,小编主要想跟大家说的就是仓库很大,要塞满它很难,反观通道很小就很容易塞满。
Spark和MapReduce的相同之处是都不带有磁盘文件系统,都可以依附HDFS作为分布式(磁盘)文件系统
(所以说Spark与Hadoop并无冲突,甚至可以与Hdoop融为一体)。
不同之处挺多的,但主要是Spark有一个分布式内存文件系统,可以对内存中的文件进行分布处理。那么小编先举一个例子让大家看看Spark和MapReduce在处理问题方式上有什么区别。
Mapreduce每一个步骤发生在内存中但产生的中间值都会储存在磁盘里,下一步操作时又会将这个中间值调用到内存中,如此循环,直到最终完成。
Spark的每个步骤也是发生在内存之中但产生的中间值会直接进入下一个步骤,直到所有的步骤完成之后才会将最终结果保存进磁盘。所以在使用Spark做数据分析能少进行很多次相对没有意义的读写,节省大量的时间,少数步骤可能感觉不出区别,但是步骤很多时,Spark的优势就体现出来了。
大家可以看出来了,MapReduce就是一个稳重的妈妈,一步一步来,有条不紊。Spark就像一个急躁的妈妈,一个步骤还没完成呢,就开始进行下一个步骤了,当然,这也要求操作台足够大,放得下这么多东西。
当然,任何技术都是有得必有失的,虽然Spark很快,但Spark运作时会占用大量计算机内存,而小编之前说过,内存空间相比于磁盘空间,那是很小很小的,这就要求使用者去购买具有较大内存的服务器布置集群,而这样的服务器是很昂贵的。由于内存的限制,即使是用昂贵的服务器,Spark也不能太好地处理很大批量的文件,而这些问题都是MapReduce不用考虑的。小编记得有大神举过很棒的例子,MapReduce就像一把大砍刀,什么都能砍,尽管速度有点不尽人意;Spark就像一把剔骨刀,很锋利速度很快,但具有局限性,不能砍太大的东西。