Hadoop版本历史
Spark和Hadoop MapReduce业内有两种意见:一是Spark将取代Hadoop MapReduce,成为未来大数据处理的发展方向;第二,Spark将与Hadoop结合,形成更大的生态系统。其实Spark和Hadoop MapReduce的关键应用是不一样的。相对于Hadoop MapReduce,Spark感觉有点“照在你身上”。Spark是在Hadoop MapReduce模型上开发的,我们可以在其中清晰的看到MapReduce的影子。所有的火花都不是从零开始创新,而是站在巨人“MapReduce”的肩膀上。我们暂且抛开争议,看看Spark相比Hadoop MapReduce有哪些优势。
1,计算速度快
大数据处理首先追求的是速度。Spark有多快?用官方的话说就是“Spark让Hadoop集群中的应用在内存中运行的速度达到100倍,即使在磁盘上也快了10倍”。有些读者看到这里可能会印象深刻。的确,在迭代计算领域,Spark的计算速度远远快于MapReduce,迭代次数越多,Spark的优势越明显。这是因为Spark很好的利用了当前服务器内存越来越大的优势,通过减少磁盘I/O来实现性能提升..他们把所有的中间处理数据都放在内存里,只在需要的时候才批量存储在硬盘里。也许读者会问:如果应用特别大,内存能装多少GB?回答:什么?GB?目前IBM服务器的内存已经扩展到了几TB。
2、应用灵活易用。
你知道AMPLab的Lester为什么放弃MapReduce吗?因为他需要把大量的精力放在Map和Reduce的编程模型上,极其不方便。除了简单的Map和Reduce操作,Spark还支持SQL查询、流查询和复杂查询,比如开箱即用的机器学习算法。同时,用户可以在同一个工作流程中无缝匹配这些能力,应用非常灵活。
Spark核心代码是63个Scala文件,非常轻量级。并且允许Java、Scala、Python开发者在他们熟悉的语言环境下工作,通过建立Java、Scala、Python、SQL(处理交互查询)来方便各行各业的使用,同时还包括大量开箱即用的机器学习库。它附带了80多个高级操作符,允许在Shell中进行交互式查询。即使是新手也可以轻松使用该应用程序。
3.与竞争对手兼容
Spark可以独立运行。除了当前的YARN集群管理,它还可以读取任何现有的Hadoop数据。它可以运行在任何Hadoop数据源上,比如HBase、HDFS等等。有了这个功能,想要从Hadoop应用迁移到Spark的用户就方便多了。Spark有兼容竞争对手的心思,何必担心大事?
4、实时处理性能非凡。
MapReduce更适合处理离线数据(当然Hadoop也可以在YARN之后使用其他工具进行流式计算)。Spark很好地支持实时流计算,依靠Spark流实时处理数据。Spark Streaming有一个强大的API,允许用户快速开发流应用程序。与Storm等其他流媒体解决方案不同,Spark Streaming无需额外的代码和配置即可完成大量恢复和交付工作。
5.社区做出了巨大的贡献。
从Spark的版本演变来看,足以说明这个平台的蓬勃生命力和社群的活跃度。尤其是2013以来,Spark一度进入快速发展期,代码库提交和社区活跃度大幅增长。从活跃度来看,Spark在所有Apache Foundation开源项目中排名前三。相对于其他大数据平台或框架,Spark的代码库是最活跃的。
Spark非常重视社团活动,组织极其规范。定期或不定期召开星火相关会议。会议分两种:一种是星火峰会,影响力很大,可谓是全球星火顶尖技术人员的峰会。目前在旧金山已经连续举办了三届峰会,从2013到2065 438+05;另一种是星火社区不定期在世界各地举办的小型Meetup活动。Spark Meetup也会定期在国内一些大城市举办,如北上广深、Xi安等地。读者可以关注当地微信微信官方账号参与。
Spark的适用场景
从大数据处理需求来看,大数据服务大致可以分为以下三类:
(1)复杂的批量数据处理,通常时间跨度在几十分钟到几个小时之间。
(2)基于历史数据的交互式查询通常需要几十秒到几分钟。
(3)基于实时数据流的数据处理通常需要几百毫秒到几秒。
目前有很多相对成熟的开源和商业软件来处理上述三种场景:第一种业务可以使用MapReduce处理批量数据;第二个业务,可以用Impala进行交互查询;对于第三种流数据处理,我们可以想到一个专业的流数据处理工具Storm。但是,这里有一个很重要的问题:对于大多数互联网公司来说,上述三种场景通常是同时遇到的。如果用不同的处理技术来面对这三个场景,这三个场景的输入/输出数据无法无缝共享,相互之间可能需要进行格式转换,而且每个开源软件都需要一个开发和维护团队,从而增加了成本。另一个不便之处是很难协调同一集群中每个系统的资源分配。
那么,有没有一款软件可以同时处理以上三种场景呢?火花可以,或者说有这样的潜力。Spark支持复杂的批处理、互操作性和流计算,兼容HDFS和亚马逊S3等分布式文件系统,可以部署在YARN和Mesos等流行的集群资源管理器上。
从Spark的设计理念(基于内存的迭代计算框架)出发,最适合有迭代操作或者需要多次操作特定数据集的应用。而且迭代次数越多,读取的数据量越大,Spark的应用效果越明显。所以对于机器学习等“迭代”应用,Spark可谓是一部好戏,比Hadoop MapReduce快几十倍。此外,Spark Streaming由于具有将中间数据存储在内存中的特性,处理速度非常快,还可以应用于需要实时处理大数据的场合。
当然,Spark也有一些不适用的场合。对于异步细粒度更新状态的应用,如Web服务或增量式Web爬虫和索引的存储,不适合增量式修改的应用模型。Spark也不适合处理超大数据量。这里说的“超大”是相对于这个集群的内存容量而言的,因为Spark要在内存中存储数据。一般来说,10TB(单次分析)以上的数据可以算是“超大”数据。
一般来说,对于中小企业的数据中心,在一次计算的数据量不大的情况下,Spark是一个不错的选择。另外,Spark并不适合混合云计算平台,因为混合云计算平台的网络传输是个大问题,即使有专用的宽带在云集群和本地集群之间传输数据,相比内存读取速度还是不够。