Hadoop和Spark都是Apache Software Foundation的开源项目,两者都是大数据分析的旗舰产品。Hadoop已经领导大数据市场超过5年。根据我们最近的市场调查,Hadoop的安装基数达到了50,000多个客户,而Spark仅拥有10,000多个安装。然而,Spark的受欢迎程度在2013年飙升,以便在一年内克服Hadoop。新安装增长率(2016/2017)显示趋势仍在持续。Spark的表现优于Hadoop,分别为47%和14%---可忽略。
为了使比较公平,我们将在这里将Spark与Hadoop MapReduce进行对比,因为它们都负责数据处理。实际上,它们之间的关键区别在于处理方法:Spark可以在内存中执行,而Hadoop MapReduce必须读取和写入磁盘。因此,处理速度显著不同 Spark可能快100倍。但是,处理的数据量也不同:Hadoop MapReduce能够处理比Spark大得多的数据集。
- 线性处理大量数据集。Hadoop MapReduce允许并行处理大量数据。它将大块分解为较小的块,以便在不同的数据节点上单独处理,并自动收集多个节点上的结果以返回单个结果。如果结果数据集大于可用RAM,则Hadoop MapReduce可能优于Spark。
- 经济的解决方案,如果没有预期的立即结果real-time result。如果处理速度不是很关键, MapReduce是一个很好的解决方案。例如,如果数据处理可以在夜间完成,考虑使用Hadoop MapReduce很有意义。
任务Spark适用于:
- 快速的数据处理。内存处理使Spark比Hadoop MapReduce更快 - RAM中的数据高达100倍,存储中的数据高达10倍。
- 迭代处理。 如果任务是一次又一次地处理数据--Spark会击败Hadoop MapReduce。Spark的弹性分布式数据集(RDD)在内存中启用多个映射操作,而Hadoop MapReduce必须将临时结果写入磁盘。
- 近实时处理。 如果企业需要near real time process,那么他们应该选择Spark及其内存处理。
- 图处理。Spark的计算模型适用于图形处理中常见的迭代计算。Apache Spark有GraphX - 用于图形计算的API。
- 机器学习。Spark有MLlib - 一个内置的机器学习库,而Hadoop需要第三方来提供它。MLlib具有开箱即用的算法,也可以在内存中运行。
- 加入数据集。由于它的速度,Spark可以更快地创建所有组合,但是如果需要大量的重组和排序的非常大的数据集的连接,Hadoop可能会更好。
分析了几个实际应用的例子得出结论。由于快速甚至接近实时处理,Spark可能在以下所有应用中都优于MapReduce。如下:
- 客户细分。分析客户行为并识别表现出类似行为模式的客户群将有助于企业了解客户偏好并创建独特的客户体验。
- 风险管理。预测不同的可能情景可以帮助管理者通过选择非风险选项做出正确的决策。
- 实时欺诈检测。在借助机器学习算法对系统进行历史数据训练之后,它可以使用这些发现来实时识别或预测可能发出欺诈信号的异常现象。
- 工业大数据分析。它还涉及检测和预测异常,但在这种情况下,这些异常与机械故障有关。正确配置的系统从传感器收集数据以检测故障前状况。
选择哪个框架?
- 大型数据集的线性处理是Hadoop MapReduce的优势。
- Spark提供快速性能,迭代处理, 实时分析,图形处理,机器学习等。在许多情况下,Spark可能会胜过Hadoop MapReduce。
好消息是Spark与Hadoop生态系统完全兼容,并且可以与Hadoop分布式文件系统,Apache Hive等一起顺利运行。如下图:
**** Spark使用MapReduce进行可选处理,使用YARN进行资源分配 ****
下图是Spark的架构图:
- Spark Core - Spark Core是大规模并行和分布式数据处理的基础引擎。此外,构建在核心之上的其他库允许流,SQL和机器学习的各种工作负载。它负责内存管理和故障恢复,调度,分发和监视群集上的作业以及与存储系统交互。
- 群集管理 - 群集管理器用于获取用于执行作业的群集资源。Spark核心运行在各种集群管理器上,包括Hadoop YARN,Apache Mesos,Amazon EC2和Spark的内置集群管理器。集群管理器处理Spark应用程序之间的资源共享。另一方面,Spark可以访问HDFS,Cassandra,HBase,Hive,Alluxio和任何Hadoop数据源中的数据
- Spark Streaming - Spark Streaming是Spark的组件,用于处理实时流数据。
- Spark SQL:Spark SQL是Spark中的一个新模块,它将关系处理与Spark的函数式编程API集成在一起。它支持通过SQL或Hive查询语言查询数据。Spark SQL的DataFrame和Dataset API为结构化数据提供了更高级别的抽象。
- GraphX:GraphX是用于图形和图形并行计算的Spark API。因此,它使用弹性分布式属性图扩展了Spark RDD。
- MLlib(机器学习):MLlib代表机器学习库。Spark MLlib用于在Apache Spark中执行机器学习。
1)Spark vs Hadoop:性能
Spark是一个快速框架,因为它可以执行内存中处理,Disks可用于存储和处理适合内存的数据。Spark内存处理可以提供近乎实时的分析。因此,它用于机器学习,安全分析,物联网传感器和信用卡处理系统。
另一方面,Hadoop最初设置为从多个资源收集数据而不用担心数据源或来源。甚至可以在分布式环境中存储和处理各种类型的数据。Hadoop的MapReduce使用批处理。它不是为实时处理而构建的,YARN背后的主要思想是在分布式环境中执行并行处理。
2)Spark vs Hadoop:易于使用
Spark是一个用户友好的框架,具有类似于SQL的Scala,Java,Python和Spark SQL等语言。SQL开发人员可以轻松学习SQL。为开发人员提供了一个交互式shell,他们可以使用它来执行查询并获得即时反馈。
通过使用shell或使用Flume或Sqoop等工具,可以轻松地在Hadoop中获取数据。YARN可以与Pig或Hive等多种工具集成。这里Hive是一个数据仓库组件,即使在分布式环境中也可以使用类似SQL的接口来执行大型数据集的读取,写入和管理。有许多工具可以与Hadoop集成。
3)Spark vs Hadoop:成本
Spark和Hadoop都是开源框架,因此用户无需支付任何使用和安装软件的成本。在这里,用户必须支付的费用仅用于基础设施。这些产品的设计使其即使在TCO较低的情况下也可以在任何商品硬件上使用和运行。
在Hadoop中,我们可能需要具有大量磁盘空间的更快磁盘,因为此存储和处理都是基于磁盘的。要分发磁盘I / O,Hadoop需要多个系统。
在Apache Spark中,我们可能需要大量内存,因为它遵循内存处理,因此可以处理标准速度和磁盘数量。Spark可能需要大量RAM,并且会产生更多成本。
如果您将比较这两种技术,那么您会注意到Spark技术减少了所需系统的数量。需要更少的系统可能花费很多,并且这里每单位成本降低。
4)Spark vs Hadoop: 数据处理
主要有两种类型的数据处理,一种是批处理,另一种是流处理。在这里,当许多作业提交给YARN时,YARN是一个批处理框架。将作业提交给YARN时,将从群集中读取数据,然后在将结果写回群集后执行操作。然后读取数据并执行更新和下一操作。
Spark还执行类似的操作,它使用in-memory处理并且正在优化步骤。可以将相同的数据可视化为GraphX和集合。当RDD需要时,也可以连接和转换图形。
5)Spark vs Hadoop:容错
Spark和Hadoop都提供容错功能,但它们有不同的方法。HDFS和YARN分别在Hadoop和Spark系统中的DataNode和NodeManager的系统和从属守护进程中分别具有NameNode和ResourceManager的主守护进程。
如果任何从属守护程序失败,主守护程序将重新计划或重新分发所有进程内或挂起的操作。该方法是有效的,但可以增加单个故障或操作的完成时间。