用于网格计算的 Hadoop

数据挖掘 apache-hadoop
2021-09-18 11:29:01

背景:我运行一个比较数据集(数据匹配和数据协调)的产品。为了得到结果,我们需要将数据集中的每一行与对立数据集的每 N 行进行比较现在,我们在每个集合中获得多达 300 000 行数据进行比较,并且需要处理 900 亿次计算。

所以我的问题是:即使我们没有使用 Hadoop 的数据量,我们也有分布式计算的需求。Hadoop对我们来说是一个不错的选择吗?

3个回答

你的工作看起来像是一个 map-reduce 工作,因此可能对 Hadoop 有好处。不过,Hadoop 有一个生态系统的动物园。

Hadoop是一个分布式文件系统。它将数据分布在一个集群上,并且由于这些数据被拆分,因此可以并行分析。开箱即用,Hadoop 允许您在平台上编写 map reduce 作业,这就是它可能有助于解决问题的原因。

以下技术适用于 Hadoop:

  • 如果数据可以以表格格式表示,您可能需要查看hiveimpala等技术。Impala 使用集群中的所有分布式内存,并且性能非常好,同时它允许您仍然使用表结构。
  • 一个更新但有希望的替代方案也可能是spark,它允许在集群上运行更多的迭代过程。

不要低估设置时间和理解 Hadoop 所需的时间。

如果我正确理解您的描述,对于错误的问题,hadoop 似乎是一个巨大的开销。基本上你只需要一个标准的分布式架构:你不只需要传递成对的行 - 例如 mpi .... ipython.parallel, ...

数据量并不是使用 Hadoop 的唯一标准。大数据通常具有 3 V 的特征:

  • 体积,
  • 速度和
  • 种类。

从那以后,发明了比这 3 个更多的 V。我想 V 是描述什么是大数据的一种吸引人的方式。

但正如所暗示的那样,计算强度是使用 Hadoop 的完美理由(如果您的算法计算成本很高)。而且,正如暗示的那样,您描述的问题对于 Hadoop 来说是完美的,特别是因为它本质上是令人尴尬的并行。

Hadoop 对您来说是一个不错的选择吗?我会争辩,是的。为什么?因为

  1. Hadoop 是开源的(与可能昂贵和黑匣子的专有系统相比),
  2. 您的问题很适合 MapReduce 范式(令人尴尬的并行,无共享),
  3. Hadoop 很容易通过商用硬件进行扩展(与专用硬件相反,您应该通过将硬件投入到问题中来线性加速性能,并且您可以根据需要在云服务提供商上旋转集群),
  4. Hadoop 允许多种客户端语言(Java 只是众多支持语言中的一种),
  5. 可能已经有一个库可用于执行您的跨产品操作,并且
  6. 您在网络周围传送计算代码,而不是数据(您应该从中受益,而不是其他分布式平台,您将数据传送到计算节点,这是瓶颈)。

请注意,Hadoop 不是分布式文件系统(如前所述,并已更正)。Hadoop是分布式存储和处理平台。Hadoop的分布式存储组件称为Hadoop分布式文件系统(HDFS),分布式处理组件称为MapReduce。

Hadoop 现在有了轻微的发展。他们保留 HDFS 部分用于分布式存储。但是他们有一个名为 YARN(Yet Another Resource Negotiator)的新组件,它为任何计算任务(包括 MapReduce)提供适当的资源(CPU、RAM)。

在“开销”部分,每个任务(map 任务、reduce 任务)启动/停止 Java 虚拟机 (JVM) 都会产生明显的开销。您可以为您的 MapReduce 作业指定重用 JVM 以缓解此问题。

如果“开销”确实是一个问题,请查看 Apache Spark,它是 Hadoop 生态系统的一部分,它们比 MapReduce 快几个数量级,特别是对于迭代算法。

我已经使用 Hadoop 计算了在最坏情况下运行时间复杂度为 O(N^2)(n 选择 2)的成对比较(例如相关矩阵、相似矩阵)。想象一下计算 16,000 个变量之间的相关性(16,000 选择 2);如果您拥有支持集群的商品资源,Hadoop 可以轻松处理和存储结果。我使用卓越的云服务提供商(我不会说出它的名字,但你肯定能猜到它是谁)做到了这一点,它花费了我不到 100 美元且不到 18 小时。