鉴于map和reduce任务的复杂性O(map)=f(n)
和O(reduce)=g(n)
,任何人都会花时间写下Map / Reduce内部操作(排序,改组,发送数据等)的方式。 )增加计算复杂度? Map / Reduce编排的开销是多少?
我知道当你的问题足够大时,这是无稽之谈,只是不关心低效率,但对于可以在小型机器或几台机器上运行的小问题,我是否应该经历痛苦当我手头有Map / Reduce实现时设计并行算法?
答案 0 :(得分:2)
对于可以在小型机器或几台机器上运行的小问题,“是的,如果性能至关重要,你应该重写它们。正如其他人所指出的那样,通信开销很高。
我认为没有人对M / R操作进行过任何复杂性分析,因为它在实现,机器和算法方面都非常重要。你应该得到如此多的变量,比如排序:
O(n log n * s * (1/p)) where:
- n is the number of items
- s is the number of nodes
- p is the ping time between nodes (assuming equal ping times between all nodes in the network)
这有意义吗?它变得非常混乱非常快。 M / R也是一个编程框架,而不是算法本身,复杂性分析通常保留给算法。
最接近你要找的东西可能是complexity analysis of multi-threaded algorithms,这要简单得多。
答案 1 :(得分:0)
我知道当你的问题足够大时,这是无稽之谈,只是不关心低效率,但对于可以在小型机器或几台机器上运行的小问题,我是否应该经历痛苦当我手头有Map / Reduce实现时设计并行算法?
这是一个难以分析的问题。一方面,如果问题太小,那么经典的复杂性分析可能会给出错误的答案,因为较低的订单条款主导小N
。
另一方面,如果计算节点的数量太小,其中一个变量是计算节点数量的复杂性分析也将失败...再次由于Map / Reduce基础设施贡献的开销低阶条款。
那么你能做些什么呢?那么,一种方法是做一个不依赖于复杂性的更详细的分析。计算出成本函数,包括低阶项和常量,用于算法的特定实现和map / reduce框架。然后用问题大小变量的值替换,节点的数量等等。虽然您可以通过对成本函数的某些部分的估计得出结论。
第二种方法是“吮吸它并看到”。
答案 2 :(得分:-1)
Map-Reduce for Machine Learning on Multicore值得一看,比较各种众所周知的机器学习算法在更改为MR-“友好”形式时的复杂程度。
干杯。