背景:我运行一个比较数据集(数据匹配和数据协调)的产品。为了得到结果,我们需要将数据集中的每一行与对立数据集的每 N 行进行比较现在,我们在每个集合中获得多达 300 000 行数据进行比较,并且需要处理 900 亿次计算。
所以我的问题是:即使我们没有使用 Hadoop 的数据量,我们也有分布式计算的需求。Hadoop对我们来说是一个不错的选择吗?
背景:我运行一个比较数据集(数据匹配和数据协调)的产品。为了得到结果,我们需要将数据集中的每一行与对立数据集的每 N 行进行比较现在,我们在每个集合中获得多达 300 000 行数据进行比较,并且需要处理 900 亿次计算。
所以我的问题是:即使我们没有使用 Hadoop 的数据量,我们也有分布式计算的需求。Hadoop对我们来说是一个不错的选择吗?
你的工作看起来像是一个 map-reduce 工作,因此可能对 Hadoop 有好处。不过,Hadoop 有一个生态系统的动物园。
Hadoop是一个分布式文件系统。它将数据分布在一个集群上,并且由于这些数据被拆分,因此可以并行分析。开箱即用,Hadoop 允许您在平台上编写 map reduce 作业,这就是它可能有助于解决问题的原因。
以下技术适用于 Hadoop:
不要低估设置时间和理解 Hadoop 所需的时间。
如果我正确理解您的描述,对于错误的问题,hadoop 似乎是一个巨大的开销。基本上你只需要一个标准的分布式架构:你不只需要传递成对的行 - 例如 mpi .... ipython.parallel, ...
数据量并不是使用 Hadoop 的唯一标准。大数据通常具有 3 V 的特征:
从那以后,发明了比这 3 个更多的 V。我想 V 是描述什么是大数据的一种吸引人的方式。
但正如所暗示的那样,计算强度是使用 Hadoop 的完美理由(如果您的算法计算成本很高)。而且,正如暗示的那样,您描述的问题对于 Hadoop 来说是完美的,特别是因为它本质上是令人尴尬的并行。
Hadoop 对您来说是一个不错的选择吗?我会争辩,是的。为什么?因为
请注意,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 小时。