Joh*_*son 6 hadoop mapreduce machine-learning mahout
我需要做一些重型机器学习计算.我在LAN上闲置了少量机器.为了使用hadoop/mapreduce/mahout分配我的计算要比没有这些分布式框架的单个机器上运行要快得多,我需要多少台机器?这是计算开销与收益之间的实际问题,因为我假设仅在2台机器之间进行分配,总体时间比不分发和简单地在单个机器上运行更糟糕(仅仅因为分配计算涉及所有开销).
技术说明:一些繁重的计算是非常可并行的.只要每台机器都拥有自己的原始数据副本,所有这些都是有效的.
"普通"Java程序和基于Hadoop的基于MapReduce的实现是非常不同的动物,很难比较.它不像Hadoop并行化你的程序一点点; 它以完全不同的形式从上到下书写.
Hadoop有开销:只是开始工作的开销,以及启动像mappers和reducer这样的工作者.它引入了更多的时间来序列化/反序列化数据,在本地编写数据并将其传输到HDFS.
基于Hadoop的实现总是会消耗更多资源.所以,除非你无法避免,否则这是要避免的.如果您可以在一台机器上运行非分布式计算,最简单的实用建议是不分发.省去麻烦.
在Mahout推荐者的情况下,我可以非常粗略地告诉你,Hadoop工作比同一数据上的非分布式实现多出2-4倍的计算量.显然,这在很大程度上取决于算法和算法调整选择.但是给你一个数字:我不会打扰一台少于4台机器的Hadoop集群.
显然,如果你的计算不适合你的某台机器,你别无选择,只能分发.然后,权衡是你可以允许的壁钟时间与你可以投入多少计算能力.提到Amdahl定律是正确的,尽管它没有考虑Hadoop的重大开销.例如,要并行化N个方法,您至少需要N个映射器/缩减器,并且每个映射器/缩减器开销会产生N倍.还有一些固定的启动/关闭时间.