声明:本文来自于微信公众号 尹晨带货实录(ID:yinchen8810),作者:尹晨,授权转载发布。直播三年,做了很多号,也死了很多号,在过去的时间中,从算法、人货场、运营、数据等不同板块,总结超过了
互联网
2022-03-21 17:14:48
154
谈到大数据,相信大家对Hadoop和Apache Spark这两个名字并不陌生。但我们往往对它们的理解只是提留在字面上,并没有对它们进行深入的思考,下面不妨跟我一块看下它们究竟有什么异同。
解决问题的水平是不同的
首先,Hadoop和Apache Spark两者都是大数据框架,但是各自存在的目的不尽相同。Hadoop实质上更多是一个分布式数据基础设施: 它将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储,意味着您不需要购买和维护昂贵的服务器硬件。
同时,Hadoop还会索引和跟踪这些数据,让大数据处理和分析效率达到前所未有的高度。Spark,则是那么一个专门用来对那些分布式存储的大数据进行处理的工具,它并不会进行分布式数据的存储。
两者可以结合或分离
Hadoop除了提供为大家所共识的HDFS分布式数据存储功能之外,还提供了叫做MapReduce的数据处理功能。所以这里我们完全可以抛开Spark,使用Hadoop自身的MapReduce来完成数据的处理。
相反,Spark也不是非要依附在Hadoop身上才能生存。但如上所述,毕竟它没有提供文件管理系统,所以,它必须和其他的分布式文件系统进行集成才能运作。这里我们可以选择Hadoop的HDFS,也可以选择其他的基于云的数据系统平台。但Spark默认来说还是被用在Hadoop上面的,毕竟,大家都认为它们的结合是最好的。
以下是从网上摘录的对MapReduce的最简洁明了的解析:
我们要数图书馆中的所有书。你数1号书架,我数2号书架。这就是“Map”。我们人越多,数书就更快。
现在我们到一起,把所有人的统计数加在一起。这就是“Reduce”。
Spark数据处理速度秒杀MapReduce
熟悉Hadoop的人应该知道,用户首先编写一个程序,称为MapReduce程序。MapReduce程序是一个作业,作业中可以有一个或多个任务。任务可以分为map任务和reduce任务,如下图所示:
2016510101130768.png (607×355)
spark中也有job的概念,但这里的job与MapReduce中的job不同。它不是作业的最高粒度级别,而是应用程序的概念。
一个Application和一个SparkContext相关联,每个Application中可以有一个或多个Job,可以并行或者串行运行Job。Spark中的一个Action可以触发一个Job的运行。在Job里面又包含了多个Stage,Stage是以Shuffle进行划分的。在Stage中又包含了多个Task,多个Task构成了Task Set。他们之间的关系如下图所示:
2016510101159122.png (747×627)
Mapreduce中的每个Task分别在自己的进程中运行,当该Task运行完的时候,该进程也就结束了。和Mapreduce不一样的是,Spark中多个Task可以运行在一个进程里面,而且这个进程的生命周期和Application一样,即使没有Job在运行。
这个模型有什么好处呢?可以加快Spark的运行速度!Tasks可以快速地启动,并且处理内存中的数据。但是这个模型有的缺点就是粗粒度的资源管理,每个Application拥有固定数量的executor和固定数量的内存。
因为spark以不同的方式处理数据,所以它将比MapReduce快得多。MapReduce一步一步地处理数据:”从集群读取数据,进行一次处理,将结果写入集群,从集群读取更新的数据,进行下一次处理,将结果写入集群,等等;博思艾伦汉密尔顿的数据科学家柯克·伯恩对此进行了分析。
与spark相比,它将接近于“在记忆中;实时”完成所有数据分析的时间:“从集群中读取数据,完成所有必要的分析和处理,并将结果写回集群;伯恩说。spark的处理速度几乎是内存中reduce的100倍。
如果需要处理的数据和结果需求大部分情况下是静态的,且你也有耐心等待批处理的完成的话,MapReduce的处理方式也是完全可以接受的。
但如果你需要对流数据进行分析,比如那些来自于工厂的传感器收集回来的数据,又或者说你的应用是需要多重数据处理的,那么你也许更应该使用Spark进行处理。
大多数机器学习算法需要多种数据处理。此外,通常使用spark的应用场景包括以下几个方面:实时市场活动、在线产品推荐、网络安全分析、机器日志监控等。
灾难恢复
这两种灾难恢复方法截然不同,但都非常好。由于Hadoop会将每次处理的数据写入磁盘,因此处理系统错误自然是灵活的。
Spark的数据对象存储在分布于数据集群中的叫做弹性分布式数据集(RDD: Resilient Distributed Dataset)中。“这些数据对象既可以放在内存,也可以放在磁盘,所以RDD同样也可以提供完成的灾难恢复功能,”Borne指出。
25
2023-02
23
2023-02
23
2023-02
22
2022-11
11
2022-11
20
2022-10