介绍
今天,我们有很多免费的大数据处理解决方案。许多公司还提供专门的企业功能来补充开源平台。
这一趋势始于 1999 年 Apache Lucene 的开发。该框架很快成为开源并导致了 Hadoop 的创建。目前使用的两个最流行的大数据处理框架是开源的——Apache Hadoop 和 Apache Spark。
总是有一个关于使用哪个框架的问题,Hadoop 还是 Spark。
Hadoop与Spark有什么区别?Hadoop与Spark哪个更好?在本文中,了解 Hadoop 和 Spark 之间 的主要区别,以及何时应该选择其中之一,或将它们一起使用。
注意:在直接比较 Hadoop 与 Spark 之前,我们将简要介绍一下这两个框架。
什么是Hadoop?
Apache Hadoop是一个以分布式方式处理大型数据集的平台。该框架使用MapReduce将数据拆分为块,并将块分配给集群中的节点。然后 MapReduce 在每个节点上并行处理数据以产生唯一的输出。
Hadoop与Spark有哪些不同?集群中的每台机器都存储和处理数据。Hadoop 使用HDFS将数据存储到磁盘。该软件提供无缝的可扩展性选项。你可以从低至一台机器开始,然后扩展到数千台,添加任何类型的企业或商品硬件。
Hadoop 生态系统具有高度容错性。Hadoop 不依赖硬件来实现高可用性。Hadoop 的核心是在应用层寻找故障。通过跨集群复制数据,当一个硬件出现故障时,框架可以从另一个位置构建缺失的部分。
Apache Hadoop 项目由四个主要模块组成:
- HDFS – Hadoop 分布式文件系统。这是管理跨 Hadoop 集群的大型数据集存储的文件系统。HDFS 可以处理结构化和非结构化数据。存储硬件的范围可以从任何消费级 HDD 到企业驱动器。
- MapReduce。Hadoop 生态系统的处理组件。它将来自 HDFS 的数据片段分配给集群中的单独映射任务。MapReduce 并行处理块以将这些块组合成所需的结果。
- YARN。另一个资源谈判者。负责管理计算资源和作业调度。
- Hadoop Common。其他模块所依赖的一组公共库和实用程序。此模块的另一个名称是 Hadoop 核心,因为它为所有其他 Hadoop 组件提供支持。
Hadoop 的性质使每个需要它的人都可以使用它。开源社区很大,为可访问的大数据处理铺平了道路。
什么是Spark?
Hadoop与Spark有哪些不同?Apache Spark 是一个开源工具。该框架可以在独立模式下运行,也可以在云或集群管理器(例如 Apache Mesos和其他平台)上运行。它旨在提高性能并使用 RAM来缓存和处理数据。
Spark 执行不同类型的大数据工作负载。这包括类似 MapReduce 的批处理,以及实时流处理、机器学习、图计算和交互式查询。通过易于使用的高级 API,Spark 可以与许多不同的库集成,包括PyTorch和TensorFlow。要了解这两个库之间的区别,请查看我们关于PyTorch 与 TensorFlow 的文章。
创建 Spark 引擎是为了提高 MapReduce 的效率并保持其优势。尽管 Spark 没有自己的文件系统,但它可以访问许多不同存储解决方案上的数据。Spark 使用的数据结构称为弹性分布式数据集,或 RDD。
Apache Spark 有五个主要组件:
- Apache Spark Core。整个项目的基础。Spark Core 负责调度、任务调度、输入输出操作、故障恢复等必要的功能,其他功能则建立在它之上。
- Spark Streaming。该组件支持实时数据流的处理。数据可以来自许多不同的来源,包括 Kafka、Kinesis、Flume 等。
- Spark SQLL。Spark 使用此组件来收集有关结构化数据以及数据处理方式的信息。
- 机器学习库(MLlib)。该库由许多机器学习算法组成。MLlib 的目标是可扩展性并使机器学习更易于访问。
- GraphX。一组用于促进图形分析任务的 API。
注意:另请参阅我们的文章Apache Storm 与 Spark:并排比较中的 Spark 与 Storm 的比较
Hadoop与Spark有什么区别
以下部分概述了两个框架之间的主要区别和相似之处。我们将从多个角度来看看 Hadoop 与 Spark。
其中一些是成本、性能、安全性和易用性。
下表概述了以下各节中得出的结论。
Hadoop 和 Spark 比较:Hadoop与Spark哪个更好?
比较类别 | Hadoop | Spark |
表现 | 性能较慢,使用磁盘进行存储并取决于磁盘读写速度。 | 快速的内存性能,减少磁盘读写操作。 |
成本 | 一个开源平台,运行成本更低。使用负担得起的消费硬件。更容易找到训练有素的 Hadoop 专业人员。 | 一个开源平台,但依赖于内存进行计算,这大大增加了运行成本。 |
数据处理 | 最适合批处理。使用 MapReduce 跨集群拆分大型数据集以进行并行分析。 | 适用于迭代和直播数据分析。与 RDD 和 DAG 一起运行操作。 |
容错 | 一个高度容错的系统。跨节点复制数据并在出现问题时使用它们。 | 跟踪RDD块创建过程,然后在分区失败时重建数据集。Spark 还可以使用 DAG 跨节点重建数据。 |
可扩展性 | 通过添加节点和磁盘进行存储,可轻松扩展。支持数万个节点,无已知限制。 | 扩展起来更具挑战性,因为它依赖于 RAM 进行计算。支持集群中的数千个节点。 |
安全 | 非常安全。支持 LDAP、ACL、Kerberos、SLA 等。 | 不安全。默认情况下,安全性是关闭的。依靠与 Hadoop 的集成来实现必要的安全级别。 |
易于使用和 语言支持 | 使用较少支持的语言更难使用。将 Java 或 Python 用于 MapReduce 应用程序。 | 更加用户友好。允许交互式 shell 模式。API 可以用 Java、Scala、R、Python、Spark SQL 编写。 |
机器学习 | 比 Spark 慢。数据片段可能太大并造成瓶颈。Mahout 是主要的库。 | 使用内存处理要快得多。使用 MLlib 进行计算。 |
调度和资源管理 | 使用外部解决方案。YARN 是最常见的资源管理选项。Oozie 可用于工作流调度。 | 具有用于资源分配、调度和监控的内置工具。 |
表现
Hadoop与Spark有什么区别?当我们从 Hadoop 与 Spark 的数据处理方式的角度来看它们时,比较两个框架的性能似乎并不自然。尽管如此,我们还是可以画一条线并清楚地了解哪个工具更快。
通过访问本地存储在 HDFS 上的数据,Hadoop 提高了整体性能。但是,它与 Spark 的内存处理不匹配。根据 Apache 的说法,当使用 RAM 进行计算时,Spark 似乎比使用 MapReduce 的 Hadoop 快 100 倍。
主导地位仍然是对磁盘上的数据进行排序。Spark 的速度提高了 3 倍,并且在 HDFS 上处理 100TB 数据所需的节点减少了 10 倍。这一基准足以创造 2014 年的世界纪录。
Spark之所以如此霸道,主要是因为它不向磁盘读写中间数据,而是使用RAM。Hadoop 将数据存储在许多不同的来源上,然后使用 MapReduce 批量处理数据。
以上所有可能将 Spark 定位为绝对的赢家。但是,如果数据大小大于可用 RAM,则 Hadoop 是更合乎逻辑的选择。另一个需要考虑的因素是运行这些系统的成本。
成本
Hadoop与Spark有哪些不同?在考虑成本的情况下比较 Hadoop 与 Spark,我们需要比软件的价格更深入地挖掘。这两个平台都是开源的并且完全免费。然而,需要考虑基础设施、维护和开发成本,以获得粗略的总体拥有成本 (TCO)。
成本类别中最重要的因素是运行这些工具所需的底层硬件。由于Hadoop 依赖于任何类型的磁盘存储进行数据处理,因此运行它的成本相对较低。
另一方面,Spark 依赖于内存计算来进行实时数据处理。因此,旋转具有大量 RAM 的节点会大大增加拥有成本。
另一个问题是应用程序开发。Hadoop 比 Spark 存在的时间更长,并且寻找软件开发人员的难度较小。
以上几点表明Hadoop 基础架构更具成本效益。虽然这个说法是正确的,但我们需要提醒的是 Spark 处理数据的速度要快得多。因此,它需要较少数量的机器来完成相同的任务。
数据处理
这两个框架以完全不同的方式处理数据。虽然 Hadoop with MapReduce 和 Spark with RDDs 在分布式环境中处理数据,但 Hadoop 更适合批处理。相比之下,Spark 的亮点在于实时处理。
Hadoop 的目标是将数据存储在磁盘上,然后在分布式环境中分批并行分析它。MapReduce 不需要大量 RAM 来处理大量数据。Hadoop 依靠日常硬件进行存储,最适合线性数据处理。
Apache Spark 使用弹性分布式数据集( RDDs )。RDD 是存储在整个集群节点上的分区中的一组分布式元素。RDD 的大小通常太大,一个节点无法处理。因此,Spark 将 RDD 分区到最近的节点并并行执行操作。系统使用有向无环图( DAG )跟踪在 RDD 上执行的所有操作。
借助内存计算和高级 API,Spark 可以有效地处理非结构化数据的实时流。此外,数据存储在预定义数量的分区中。一个节点可以根据需要有多个分区,但一个分区不能扩展到另一个节点。
容错
Hadoop与Spark有什么区别?谈到容错类别中的 Hadoop 与 Spark,我们可以说两者都提供了可观的故障处理水平。此外,我们可以说他们处理容错的方式是不同的。
Hadoop 以容错作为其运行的基础。它在节点间多次复制数据。如果出现问题,系统会通过从其他位置创建丢失的块来恢复工作。主节点跟踪所有从节点的状态。最后,如果从节点没有响应来自主节点的 ping,主节点会将挂起的作业分配给另一个从节点。
Spark 使用 RDD 块来实现容错。系统会跟踪不可变数据集的创建方式。然后,它可以在出现问题时重新启动该过程。Spark 可以通过使用工作流的 DAG 跟踪来重建集群中的数据。这种数据结构使 Spark 能够处理分布式数据处理生态系统中的故障。
可扩展性
在本节中,Hadoop 和 Spark 之间的界限变得模糊。Hadoop 使用 HDFS 来处理大数据。当数据量快速增长时,Hadoop 可以快速扩展以满足需求。由于 Spark 没有自己的文件系统,所以当数据太大而无法处理时,它不得不依赖 HDFS。
通过向网络添加更多服务器,集群可以轻松扩展和提高计算能力。因此,两个框架中的节点数量都可以达到数千个。对于可以添加到每个集群的服务器数量以及可以处理的数据量,没有严格的限制。
一些确认的数字包括Spark 环境中的 8000 台机器,具有 PB 级数据。在谈到 Hadoop 集群时,众所周知,它们可以容纳数万台机器和接近 1 EB 的数据。
易用性和编程语言支持
Hadoop与Spark哪个更好?Spark 可能是较新的框架,没有 Hadoop 那么多可用的专家,但众所周知,它对用户更友好。相比之下,Spark 支持除本机语言 (Scala) 之外的多种语言:Java、Python、R 和 Spark SQL。这允许开发人员使用他们喜欢的编程语言。
在Hadoop框架是基于Java。编写 MapReduce 代码的两种主要语言是 Java 或 Python。Hadoop 没有交互模式来帮助用户。但是,它与 Pig 和Hive工具集成以方便编写复杂的 MapReduce 程序。
除了支持多种语言的 API 之外,Spark凭借其交互模式在易用性部分中获胜。你可以使用 Spark shell 与 Scala 或 Python 交互分析数据。shell 为查询提供即时反馈,这使得 Spark 比 Hadoop MapReduce 更易于使用。
另一个让 Spark 占上风的事情是程序员可以在适用的地方重用现有的代码。通过这样做,开发人员可以减少应用程序开发时间。可以将历史数据和流数据结合起来,使这个过程更加有效。
安全
比较 Hadoop 与 Spark 的安全性,我们将立即放手一搏——Hadoop 是明显的赢家。最重要的是,Spark 的安全性默认是关闭的。这意味着如果你不解决此问题,你的设置就会暴露。
你可以通过共享密钥或事件日志引入身份验证来提高 Spark 的安全性。但是,这对于生产工作负载来说还不够。
相比之下,Hadoop 使用多种身份验证和访问控制方法。最难实现的是 Kerberos 身份验证。如果 Kerberos 处理太多,Hadoop 还支持Ranger、LDAP、ACL、节点间加密、HDFS 上的标准文件权限和服务级别授权。
但是,通过与 Hadoop 集成,Spark 可以达到足够的安全级别。这样,Spark 就可以使用 Hadoop 和 HDFS 可用的所有方法。此外,当 Spark 在 YARN 上运行时,你可以采用我们上面提到的其他身份验证方法的好处。
机器学习
Hadoop与Spark有哪些不同?机器学习是一个迭代过程,最好使用内存计算。出于这个原因,Spark 被证明是该领域的一个更快的解决方案。
这样做的原因是 Hadoop MapReduce 将作业拆分为并行任务,这些任务对于机器学习算法来说可能太大了。此过程会在这些 Hadoop 应用程序中产生 I/O 性能问题。
Mahout 库是 Hadoop 集群中主要的机器学习平台。Mahout 依赖 MapReduce 来执行聚类、分类和推荐。轮回开始取代这个项目。
Spark 带有一个默认的机器学习库,MLlib。该库执行迭代内存 ML 计算。它包括执行回归、分类、持久化、管道构建、评估等的工具。
事实证明,在基于 Hadoop 磁盘的环境中,带有 MLlib 的 Spark 比 Apache Mahout 快 9 倍。当你需要比 Hadoop 提供的更高效的结果时,Spark 是机器学习的更好选择。
调度和资源管理
Hadoop与Spark哪个更好?Hadoop 没有内置的调度程序。它使用外部解决方案进行资源管理和调度。通过ResourceManager和NodeManager,YARN 负责 Hadoop 集群中的资源管理。可用于安排工作流的工具之一是 Oozie。
YARN 不处理单个应用程序的状态管理。它只分配可用的处理能力。
Hadoop MapReduce 可与CapacityScheduler和FairScheduler等插件配合使用。这些调度程序确保应用程序根据需要获得必要的资源,同时保持集群的效率。FairScheduler 为应用程序提供必要的资源,同时跟踪所有应用程序最终获得相同的资源分配。
另一方面,Spark 内置了这些功能。该DAG调度负责将运营几个阶段。每个阶段都有多个 DAG 调度和 Spark 需要执行的任务。
Spark Scheduler 和 Block Manager 在集群中执行作业和任务的调度、监控和资源分配。
Hadoop 与 Spark 的用例
Hadoop与Spark有哪些区别?在上面列出的部分中查看 Hadoop 与 Spark,我们可以为每个框架提取一些用例。
Hadoop 用例包括:
- 在数据大小超过可用内存的环境中处理大型数据集。
- 以有限的预算构建数据分析基础设施。
- 完成不需要立竿见影的结果的工作,时间不是限制因素。
- 批处理任务利用磁盘读写操作。
- 历史和档案数据分析。
使用 Spark,我们可以将其性能优于 Hadoop 的以下用例分开:
- 实时流数据分析。
- 当时间紧迫时,Spark 可以通过内存计算快速提供结果。
- 使用迭代算法处理并行操作链。
- 图并行处理以对数据进行建模。
- 所有机器学习应用程序。
注意:如果你已经做出决定,你可以按照我们的指南了解如何在 Ubuntu上安装 Hadoop或如何在 Ubuntu上安装 Spark。如果你使用的是 Windows 10,请参阅如何在 Windows 10上安装 Spark。
Hadoop 还是 Spark?
Hadoop与Spark有哪些不同?Hadoop 和 Spark 是处理大数据的技术。除此之外,它们在管理和处理数据的方式上是非常不同的框架。
根据本文前面的部分,Spark 似乎是明显的赢家。虽然这在一定程度上可能是正确的,但实际上,它们不是为了相互竞争而创建的,而是互补的。
当然,正如我们在本文前面列出的那样,在某些用例中,一个或另一个框架是更合乎逻辑的选择。在大多数其他应用程序中,Hadoop 和 Spark 一起工作得最好。作为继任者,Spark 并不是要取代 Hadoop,而是要利用其特性来创建一个新的、改进的生态系统。
通过将两者结合起来,Spark 可以利用它所缺少的功能,例如文件系统。Hadoop 使用负担得起的硬件存储大量数据,然后执行分析,而 Spark 带来实时处理来处理传入数据。如果没有 Hadoop,业务应用程序可能会错过 Spark 无法处理的关键历史数据。
Hadoop与Spark哪个更好?在这种协作环境中,Spark 还利用了 Hadoop 的安全性和资源管理优势。使用 YARN,Spark 集群和数据管理更加容易。你可以使用任何可用资源自动运行 Spark 工作负载。
这种合作在追溯交易数据分析、高级分析和物联网数据处理方面提供了最佳结果。所有这些用例都可以在一个环境中实现。
Hadoop 和 Spark 的创建者旨在使这两个平台兼容并产生适合任何业务需求的最佳结果。
结论
Hadoop与Spark有什么区别?本文在多个类别中比较了 Apache Hadoop 和 Spark 。这两个框架在大数据应用中都扮演着重要的角色。虽然 Spark 似乎是其速度和用户友好模式的首选平台,但某些用例需要运行 Hadoop。当需要分析大量数据时尤其如此。
Spark 需要更大的维护预算,但也需要更少的硬件来执行与 Hadoop 相同的工作。你应该记住,这两个框架各有优势,并且它们可以最好地协同工作。
通过分析本指南中列出的部分,你应该更好地了解 Hadoop 和 Spark 各自带来的内容。