回答你的问题。我会给出一个类似的答案来更好地澄清它。Apache Spark也是市场上最著名的大数据工具之一。它也使用内存计算来快速运行任务,但也利用集群计算来更好地分配工作负载。
与此类似,R+ Hadoop也以同样的方式工作。R 有效地做的是定义要使用的任务或机器学习算法,并在 Hadoop 集群的节点上进行转换,以更好地利用并行化方面。
由于 R 语言的正常工作非常依赖 RAM,这使得海量数据的处理时间呈指数级增长。通常,R 通过允许在内核中进行多线程来解决这个问题,这样它就可以尽可能优化地运行任务。但是正如你所知道的,这提供了它可以处理多少数据的上限。R + Hadoop 所做的是它提供了更多节点,因此本质上可以转换为可用于运行以下任务的更多内核。
编辑: 根据要求对最后一点进行更多详细说明
简而言之,将R视为一种为数据分析而构建的语言,它利用多线程更有效地执行所需的分析任务。这种多线程特性使您可以同时将不同的任务作为不同的线程运行,从而尝试在 R 的有限能力范围内实现尽可能多的并行化。
并回答您的问题,如果没有时间限制,R 是否可以执行与 R+Hadoop 提供的相同任务
答案是理论上是,实际上不是!直觉上,我们可能会认为 R 可以通过花费更多时间来处理此类任务。但情况并非总是如此。这更多地取决于任务。
例如,如果 R 正在对几百万条记录的数组中出现的次数进行简单的频率计数,您显然可以说即使有几个线程,它也可能比 R+Hadoop 慢,并在一定数量后完成任务时间。但是如果任务是说矩阵的特征值分解,这样的转换需要在矩阵的元素级别进行大量计算。假设该矩阵的大小是几百万 x 几百万,这种类型的计算肯定会导致任何普通应用程序出现内存错误,因为它会限制它必须暂时保存到 RAM 中的所有数据。这个瓶颈问题有时可能会导致整个系统出现故障,但最简单的情况是内存错误。
使用 R+Hadoop 解决了这样的问题,因为它允许您将相同的策略分布在具有相应内核的多台计算机上。因此,与在同一个应用程序上运行它相比,它可以让您更轻松地处理负载,这样您还可以防止我上面提到的错误。这就是分布式计算的力量。