企业生产环境考虑:Spark 全方位对比 Hadoop MapReduce

Apache Spark 与 Hadoop MapReduce 的五个主要区别:
1、Apache Spark 可能比 Hadoop MapReduce 快 100 倍。
2、Apache Spark 使用 内存,并且不依赖于 Hadoop 的两阶段范式。
3、Apache Spark 适用于可以全部放入服务器 内存 的较小数据集。
4、Hadoop 处理海量数据集更具成本效益。
5、Apache Spark 现在比 Hadoop MapReduce 更受欢迎。
多年来,Hadoop 一直是大数据无可争议的首选——直到 Spark 出现。自 2014 年首次发布以来,Apache Spark 一直在点燃大数据世界。凭借 Spark 便捷的 API 和承诺的速度比 Hadoop MapReduce 快 100 倍,一些分析人士认为,Spark 标志着大数据新时代的到来。

Spark 是一个开源数据处理框架,如何能够如此快速地处理所有这些信息?秘诀在于 Spark 在集群上运行在内存中,它不依赖于 Hadoop 的 MapReduce 两阶段范式。这使得重复访问相同数据的速度更快。 Spark 可以作为独立应用程序运行,也可以在 Hadoop YARN 之上运行,它可以直接从 HDFS 读取数据。雅虎、英特尔、百度、Yelp 和 Zillow 等数十家主要科技公司已经将 Spark 作为其技术堆栈的一部分。

虽然 Spark 似乎注定要取代 Hadoop MapReduce,但您现在还不应该指望 MapReduce。在这篇文章中,我们将比较这两个平台,看看 Spark 是否真的非常有优势。

什么是 Apache Spark?
Apache Spark 是“用于大规模数据处理的统一分析引擎”。 Spark 由非营利性的 Apache Software Foundation 维护,该基金会已经发布了数百个开源软件项目。自项目启动以来,已有 1200 多名开发人员为 Spark 做出了贡献。

Spark 最初是在加州大学伯克利分校的 AMPLab 开发的,于 2010 年首次作为开源项目发布。Spark 使用 Hadoop MapReduce 分布式计算框架作为其基础。 Spark 旨在改进 MapReduce 项目的几个方面,例如性能和易用性,同时保留 MapReduce 的许多优点。

Spark 包括一个核心数据处理引擎,以及用于 SQL、机器学习和流处理的库。凭借适用于 Java、Scala、Python 和 R 的 API,Spark 在开发人员中享有广泛的吸引力——为其赢得了大数据处理领域“瑞士军刀”的美誉。

什么是 Hadoop MapReduce?
Hadoop MapReduce 将自己描述为“一个用于轻松编写应用程序的软件框架,该应用程序以可靠、容错的方式在大型商用硬件集群(数千个节点)上并行处理大量数据(多 TB 数据集)。”

MapReduce 范式由两个顺序任务组成:Map 和 Reduce(因此得名)。 Map 过滤和排序数据,同时将其转换为键值对。然后,Reduce 接受此输入并通过对数据集执行某种汇总操作来减小其大小。

MapReduce 可以通过分解大型数据集并并行处理它们来极大地加速大数据任务。 MapReduce 范式由 Google 员工 Jeff Dean 和 Sanjay Ghemawat 于 2004 年首次提出;后来它被整合到 Apache 的 Hadoop 框架中以进行分布式处理。

Spark 和 MapReduce 的区别
Apache Spark 和 Hadoop MapReduce 之间的主要区别是:

>性能
>易于使用
>数据处理
>安全
然而,Spark 和 MapReduce 之间也有一些相似之处——这并不奇怪,因为 Spark 使用 MapReduce 作为其基础。 Spark 和 MapReduce 的相似点包括:

>成本
>兼容性
>容错
下面,我们将在每个部分详细介绍 Spark 和 MapReduce 之间的差异(以及相似之处)。

Spark VS MapReduce:性能
Apache Spark 在随机存取存储器 (RAM) 中处理数据,而 Hadoop MapReduce 在执行映射或归约操作后将数据持久化回磁盘。那么理论上,Spark 的性能应该优于 Hadoop MapReduce。尽管如此,Spark 需要大量内存。与标准数据库非常相似,Spark 将进程加载到内存中并保留在那里,直到进一步通知以进行缓存。如果您在 Hadoop YARN 上运行 Spark 和其他需要资源的服务,或者如果数据太大而无法完全放入内存,那么 Spark 可能会遭受严重的性能下降。

MapReduce 会在作业完成后立即终止其进程,因此它可以轻松地与性能差异很小的其他服务一起运行。

对于需要多次传递相同数据的迭代计算,Spark 具有优势。但是,当涉及到类似 ETL 的一次性作业时——例如,数据转换或数据集成——这正是 MapReduce 的设计目的。

小结:当所有数据都适合内存时,Spark 性能更好,尤其是在专用集群上。 Hadoop MapReduce 专为无法放入内存的数据而设计,并且可以与其他服务一起很好地运行。

Spark VS Hadoop MapReduce:易用性
Spark 为 Java、Scala 和 Python 提供了预构建的 API,还包括用于 SQL 的 Spark SQL(以前称为 Shark)。由于 Spark 的简单构建块,编写用户定义的函数很容易。 Spark 甚至包括用于运行命令并立即反馈的交互模式。

MapReduce 是用 Java 编写的,并且非常难以编程。 Apache Pig 让它变得更容易(尽管它需要一些时间来学习语法),而 Apache Hive 则增加了 SQL 兼容性。一些 Hadoop 工具也可以在没有任何编程的情况下运行 MapReduce 作业。

此外,虽然 Hive 包含命令行界面,但 MapReduce 没有交互模式。 Apache Impala 和 Apache Tez 等项目希望将完整的交互式查询引入 Hadoop。

在安装和维护方面,Spark 不受 Hadoop 的约束。 Spark 和 Hadoop MapReduce 都包含在 Hortonworks (HDP 3.1) 和 Cloudera (CDH 5.13) 的发行版中。

小结:Spark 更易于编程,并且包含交互模式。 Hadoop MapReduce 更难编程,但有几个工具可以使它更容易。

Spark VS Hadoop MapReduce:成本
Spark 和 MapReduce 是开源解决方案,但您仍然需要在机器和人员上花钱。 Spark 和 MapReduce 都可以使用商品服务器并在云上运行。此外,这两种工具都有相似的硬件要求:


Spark 集群中的内存至少应该与您需要处理的数据量一样大,因为数据必须适合内存才能获得最佳性能。如果您需要处理大量数据,Hadoop 肯定是更便宜的选择,因为硬盘空间比内存空间便宜得多。

另一方面,考虑到 Spark 和 MapReduce 的性能,Spark 应该更划算。 Spark 需要更少的硬件来更快地执行相同的任务,尤其是在计算能力按使用付费的云服务器上。

人员配备问题呢?尽管 Hadoop 自 2005 年就已经存在,但市场上仍然缺乏 MapReduce 专家。根据 Gartner 的一份研究报告,57% 的使用 Hadoop 的组织表示“获得必要的技能和能力”是他们最大的 Hadoop 挑战。

那么这对于自 2010 年才出现的 Spark 来说意味着什么呢?虽然它可能有更快的学习曲线,但 Spark 也缺乏合格的专家。好消息是,有大量 Hadoop 即服务产品和基于 Hadoop 的服务(如 Integrate.io 自己的数据集成服务),这有助于缓解这些硬件和人员配备要求。同时,Spark 即服务选项可通过 Amazon Web Services 等提供商获得。

小结:根据基准,Spark 更具成本效益,但人员配备成本可能更高。 Hadoop MapReduce 可能会更便宜,因为可用的人员更多,而且对于海量数据量来说可能更便宜。

Spark VS Hadoop MapReduce:兼容性
Apache Spark 可以作为独立应用程序在 Hadoop YARN 或 Apache Mesos 内部部署或云中运行。 Spark 支持实现 Hadoop 输入格式的数据源,因此它可以与 Hadoop 支持的所有相同数据源和文件格式集成。

Spark 还通过 JDBC 和 ODBC 与商业智能工具一起工作。

底线:Spark 对各种数据类型和数据源的兼容性与 Hadoop MapReduce 相同。

Spark vs Hadoop MapReduce:数据处理
Spark 可以做的不仅仅是简单的数据处理:它还可以处理图形,它包括 MLlib 机器学习库。由于其高性能,Spark 可以进行实时处理和批处理。 Spark 提供了一个“一刀切”的平台供您使用,而不是在不同的平台上拆分任务,这会增加您的 IT 复杂性。

Hadoop MapReduce 非常适合批处理。如果你想要一个实时选项,你需要使用另一个平台,比如 Impala 或 Apache Storm,而对于图形处理,你可以使用 Apache Giraph。 MapReduce 曾经有 Apache Mahout 用于机器学习,但后来被 Spark 和 H2O 抛弃了。

小结:Spark 是数据处理的瑞士军刀,而 Hadoop MapReduce 是批处理的突击刀。

Spark vs Hadoop MapReduce:容错
Spark 具有每个任务的重试和推测执行,就像 MapReduce 一样。尽管如此,MapReduce 在这里有一点优势,因为它依赖于硬盘驱动器,而不是 RAM。如果 MapReduce 进程在执行过程中崩溃,它可以从中断的地方继续,而 Spark 必须从头开始处理。

小结:Spark 和 Hadoop MapReduce 都具有良好的容错性,但 Hadoop MapReduce 的容错性稍强一些。

Spark VS Hadoop MapReduce:安全性
在安全性方面,与 MapReduce 相比,Spark 没有那么先进。事实上,Spark 中的安全性默认设置为“关闭”,这会使您容易受到攻击。 RPC 通道支持通过共享密钥在 Spark 中进行身份验证。 Spark 将事件日志记录作为一项功能,并且可以通过 javax servlet 过滤器保护 Web UI。此外,由于 Spark 可以运行在 YARN 上并使用 HDFS,因此还可以享受 Kerberos 身份验证、HDFS 文件权限以及节点之间的加密。

Hadoop MapReduce 可以享受所有 Hadoop 安全优势并与 Hadoop 安全项目集成,例如 Knox Gateway 和 Apache Sentry。旨在提高 Hadoop 安全性的 Project Rhino 仅在添加 Sentry 支持方面提到了 Spark。否则,Spark 开发人员将不得不自己提高 Spark 的安全性。

小结:与具有更多安全功能和项目的 MapReduce 相比,Spark 安全性仍然欠发达。

Spark 的常用场景
虽然两者都是大规模数据处理的强大选项,但某些情况下,其中一种比另一种更理想。

流数据处理
随着公司走向数字化转型,他们正在寻找实时分析数据的方法。 Spark 的内存数据处理使其成为处理流数据的理想选择。 Spark Streaming 是 Spark 的一个变体,它使这个用例成为可能。那么,公司可以通过哪些方式利用 Spark Streaming?

流式 ETL – 在传统的 ETL 过程中,数据被读取、转换为兼容格式并保存到目标数据存储中。使用 Streaming ETL 的过程效率更高,因为数据在保存到目标数据存储之前会在内存中不断清理和聚合。

数据丰富——公司在尝试适应和提供更增强的客户体验时处于不断变化的状态。通过将实时数据与静态数据相结合,公司可以构建更可靠的客户画像,从而为他们提供个性化体验。

触发事件检测——实时响应事件的能力是一项重要的业务能力,有助于提高敏捷性和适应变化的能力。借助 Spark Streaming,公司可以实时分析数据,以识别需要立即关注的异常活动。

机器学习
在预测分析方面,Spark 的机器学习库 (MLib) 提供了一套强大的工具,可以轻松完成它。当用户对一组数据进行重复查询时,他们本质上是在构建类似于机器学习的算法。例如,机器学习可以帮助公司出于营销目的进行客户细分。它还可以帮助执行情绪分析。

交互式查询
想象一下能够对实时数据执行交互式查询。从本质上讲,您可以分析大型数据集,而无需依赖外部数据存储来处理信息。使用 Spark Streaming,您可以查询数据流,而无需将其持久化到外部数据库。

MapReduce 的常用场景
当处理对于内存中操作来说太大的数据时,MapReduce 是要走的路。因此,MapReduce 最适合处理大型数据集。

处理大型数据集(PB或TB)
考虑到实施和维护所需的时间和费用,千兆字节大小不足以证明 MapReduce 的合理性。希望管理PB或TB数据的组织是 MapReduce 的理想选择。

以不同格式存储数据
公司可以使用 MapReduce 处理多种文件类型,例如文本、图像、纯文本等。由于这些文件对于内存中的处理来说太大了,使用 MapReduce 进行批处理更经济。

数据处理
MapReduce 具有对大型数据集执行基本和复杂分析的强大功能。通过使用基于磁盘的存储而不是内存中的处理,对大型数据集进行汇总、过滤和连接等任务的效率要高得多。

Spark 与 Hadoop MapReduce 趋势

随着公司寻找在拥挤的市场中保持竞争力的新方法,他们将需要适应即将到来的数据管理趋势。这些趋势包括:

XOps – 使用 DevOps 的最佳实践,XOps 的目标是在数据管理过程中实现可靠性、可重用性和可重复性。

Data Fabric – 作为一个架构框架,Data Fabric 的目标是在一个无缝的数据管理平台中结合多种类型的数据存储、分析、处理和安全性

数据分析作为核心业务功能 – 传统上,数据管理由一个单独的团队处理,该团队分析数据并将其提供给关键业务领导者。然而,一种新方法将这些数据直接交到组织领导者手中,这样他们就可以立即访问这些信息以进行决策。

结论
Apache Spark 可能比 Hadoop MapReduce 快 100 倍。
Apache Spark 使用 RAM,并且不依赖于 Hadoop 的两阶段范式。
Apache Spark 适用于可以全部放入服务器 RAM 的较小数据集。
Hadoop 处理海量数据集更具成本效益。
Apache Spark 现在比 Hadoop MapReduce 更受欢迎。
Apache Spark 是大数据平台上闪亮的新玩具,但仍有使用 Hadoop MapReduce 的用例。无论您选择 Apache Spark 还是 Hadoop MapReduce,

Spark具有出色的性能,并且具有很高的成本效益,这得益于其内存数据处理。它与 Hadoop 的所有数据源和文件格式兼容,并且学习曲线更快,并具有可用于多种编程语言的友好 API。 Spark 甚至包括图形处理和机器学习功能。

Hadoop MapReduce 是一个更成熟的平台,它是专门为批处理而构建的。对于无法放入内存的超大数据,MapReduce 比 Spark 更具成本效益,而且可能更容易找到具有 MapReduce 经验的员工。此外,由于许多支持项目、工具和云服务,MapReduce 生态系统目前更大。

但即使你认为 Spark 看起来像这里的赢家,你也很可能不会单独使用它。您仍然需要 HDFS 来存储数据,并且您可能想要使用 HBase、Hive、Pig、Impala 或其他 Hadoop 项目。这意味着您仍然需要与 Spark 一起运行 Hadoop 和 MapReduce 以获得完整的大数据包。

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。更多免费资源在http://www.gitweixin.com/?p=2627

发表评论

邮箱地址不会被公开。 必填项已用*标注