为什么最新的Hadoop没有内存计算功能?

Why there is no in memory computation functionality in latest Hadoop?

我们都知道Spark使用RAM来存储处理后的数据,Spark和Hadoop都使用RAM进行计算,这使得Spark访问数据的速度非常快。但如果那是产生很大差异的一件事(除了 Tungsten 和 Catalyst),我们可以将它添加到 Hadoop 本身。为什么我们不只改变 Hadoop 中的存储例程(将其保存在内存中),而是完全发明一个不同的工具(Apache Spark)?是否有任何其他限制阻止 Hadoop 在内存存储中实施?

有两个主要因素决定了“选择”在 Hadoop 之上完全使用另一个平台来加快计算速度(例如 Spark),而不是改革后者的方式执行其应用程序。

1. Hadoop 更像是一种基础设施,而不仅仅是一个分布式计算库

我绝不暗示您不能使用它来根据您的需要通过使用 MapReduce 范例的方式来开发应用程序。当我们谈论在 Hadoop 中工作时,我们不仅仅是在谈论资源管理器 (YARN) 或分布式文件系统 (HDFS),而且我们还必须包括 ecosystem 产品基于或适用于它(例如 Flume, Pig, Hive,是的,您也猜对了 Spark)。这些模块充当 Hadoop 之上的扩展,以便在 Hadoop MapReduce 处理任务的方式 and/or 将数据存储在磁盘上变得麻烦时使事情变得更容易和更灵活。

您实际上很有可能将 Spark 用于 运行 一个应用程序,该应用程序使用其漂亮而全面的库,同时从 HDFS 中的目录检索数据,您会发现 Hadoop 只是平台的基础您的应用程序 运行ning。无论您可以在上面放什么,都是您的选择和偏好,完全根据您的需要。

2。主内存更加昂贵和复杂

当您在 Hadoop 中开发应用程序时,如果知道所有已处理的数据将始终存储在 system/cluster 的磁盘中,您会感到很欣慰,因为您知道:

a) 通过自己查看中间过程数据和最终过程数据,您可以很容易地指出突出的问题,

b) 你可以很容易地支持可能需要 500GB 到 10-20TB 的应用程序(如果我们谈论的是集群,我猜)但是如果你可以支持大量的(我的意思是 繁重,如多个 GB 的 RAM)应用程序内存

这与在 Hadoop 等项目中扩展资源的整个 scale-out 方式有关,在 Hadoop 等项目中,不是构建一些强大的节点来获取大量数据过程中,最好只添加更多功能较弱的节点,这些节点是根据通用硬件规格构建的。这也是 Hadoop 在某种程度上仍然被误认为是一个以构建小型内部数据仓库为中心的项目的原因之一(但这真的是另一个故事)。


然而,在这一点上我不得不说,由于最近的趋势,Hadoop 的使用率正在慢慢下降:

  • 像 Spark 这样的项目变得更加独立,并且 approachable/user-friendly 在使用机器学习应用程序等更复杂的东西时(你可以阅读这篇关于它的小而简洁的文章,其中一些现实检查正在进行中)放弃 here)

  • Hadoop 的基础设施方面受到使用 Kubernetes 容器而不是 YARN 模块或实际上可以完全替代 HDFS 的 Amazon S3 的挑战(但这并不意味着事情有那么糟糕关于 Hadoop,您可以在这篇更广泛和基于观点的文章中体验实验和事物的当前状态 here)

最后我相信 Hadoop 会在未来几年找到它的用武之地,但每个人也都在前进。 Hadoop 的概念值得了解和掌握,即使可能甚至没有任何公司或企业实施它,因为您永远不会真正知道使用 Hadoop 开发某些东西是否会更容易、更稳定,而不是使用每个人都在使用更新更流畅的东西。

当然总是有内存计算。您不能在磁盘上添加、减少。

除此之外:

  • 创建 Hadoop 的主要目标是在批处理模式下从磁盘执行数据分析。因此,原生 Hadoop 不支持实时分析和交互。它的优点是当推到紧要关头时,它可以处理比 Spark 更大的数量,但与 Spark API 相比,使用它很麻烦。

  • Spark 设计为使用尽可能多的内存处理在 Scala 中开发的处理和分析引擎。为什么”随着对信息的实时分析成为进行机器学习的模式和能力,这需要迭代处理以及交互式查询。

  • Hadoop API 和 HDFS 或云等效数据存储上的 Spark relies/relied,以及 YARN(如果不使用 Spark Stand-Alone,容错)。现在有了 K8 和 S3 等,这一切都变得有点模糊,但使用 Spark 更容易,但胆小的人不适合。

  • Spark 至少在很多方面依赖 HDFS - 例如容错,API 访问 HDFS。

简单地说,他们做不同的事情,并且会继续这样做。