6

我需要做一些繁重的机器学习计算。我有少量机器在 LAN 上空闲。我需要多少台机器才能使用 hadoop / mapreduce / mahout 分布我的计算比在没有这些分布式框架的单台机器上运行要快得多?这是一个计算开销与收益的实际问题,因为我假设仅在 2 台机器之间分配总时间会比不分配并仅在单台机器上运行更糟糕(只是因为分配计算所涉及的所有开销)。

技术说明:一些繁重的计算非常可并行化。只要每台机器都有自己的原始数据副本,所有这些都是。

4

4 回答 4

8

一个“普通”的 Java 程序和一个基于 Hadoop、基于 MapReduce 的实现是完全不同的野兽,很难比较。它不像 Hadoop 并行化你的程序的一点点。它从上到下以完全不同的形式书写。

Hadoop 有开销:只是开始工作的开销,以及启动像 mapper 和 reducers 这样的工作人员的开销。它引入了更多时间花在序列化/反序列化数据、将其写入本地并将其传输到 HDFS 上。

基于 Hadoop 的实现总是会消耗更多的资源。所以,除非你无法避免,否则这是要避免的。如果您可以在一台机器上运行非分布式计算,那么最简单的实用建议就是不要进行分布式计算。为自己省去麻烦。

在 Mahout 推荐器的情况下,我可以非常粗略地告诉你,Hadoop 作业的计算量是相同数据上的非分布式实现的 2-4 倍。显然,这在很大程度上取决于算法和算法调整选择。但是给你一个数字:我不会为少于 4 台机器的 Hadoop 集群而烦恼。

显然,如果你的计算不能在你的一台机器上运行,你别无选择,只能分发。然后权衡是您可以允许什么样的挂钟时间与您可以投入多少计算能力。对 Amdahl 定律的引用是正确的,尽管它没有考虑 Hadoop 的显着开销。例如,要并行化 N 种方式,您至少需要 N 个 mapper/reducer,并且会产生 N 倍于每个 mapper/reducer 的开销。也有一些固定的启动/关闭时间。

于 2011-07-13T18:58:56.507 回答
6

参见阿姆达尔定律

Amdahl 定律是算法的并行化实现相对于串行算法的预期加速之间关系的模型,假设并行化时问题大小保持不变。例如,如果对于给定的问题规模,算法的并行化实现可以任意快速地运行 12% 的算法操作(而其余 88% 的操作不可并行化),阿姆达尔定律指出并行化版本的最大加速是非并行实现的 1/(1 – 0.12) = 1.136 倍。

方程式的图片

没有细节很难给出更详细的答案。

于 2011-07-13T16:45:12.750 回答
1

我知道这已经得到了回答,但我会把帽子扔进戒指。我不能给你一个一般的经验法则。性能提升实际上取决于许多因素:

  1. 所有组件/算法的并行/互斥程度。
  2. 数据集的大小
  3. 数据集的前后处理[包括拆分/映射,减少/连接]
  4. 网络流量

如果你有一个高度连接的算法,比如贝叶斯网络、神经网络、马尔科夫、PCA 和 EM,那么 hadoop 程序的大部分时间都将用于处理、拆分和重组实例。[假设您每个实例有大量节点(超过 1 台机器可以处理)。如果您遇到这种情况,网络流量将成为更大的问题。

如果您有诸如路径查找或模拟退火之类的算法,那么很容易将实例分离到它们自己的 map/reduce 作业中。这些类型的算法可以非常快。

于 2011-08-09T18:49:12.690 回答
0

另一个方面是你的瓶颈是什么,迫使你使用 mapreduce。如果您的单台机器具有合理的数据大小并且您只是探测速度提升,那么您可以更喜欢使用 GPU 实现。即使在一台机器上,它们也更容易设置和使用,而且效果很好。

于 2014-09-01T14:21:18.220 回答