我有一个问题,那就是任何无法通过Map / Reduce完成的任务。 因为根据Map Reduce的定义,即 MapReduce作业通常将输入数据集拆分为独立的块,这些块由map任务以完全并行的方式处理。 这意味着Map Reduce无法执行依赖任务。我对吗?并且请举个例子。
答案 0 :(得分:1)
我认为这不是一个正确的问题。你应该问一下MapReduce中哪些任务不可能,但MapReduce中哪些任务效率低。
在最基本的层面上,如果你有一个算法,你可以在一个映射器中执行它。将作业设置为仅使用1个映射器而不使用reducer。因此,MapReduce可以计算任何任务,这是真实的。
但是,有许多任务不能将井转换为MapReduce作业。图谱算法和迭代算法(想想k-means)在MapReduce中是很难做到的。他们是可能的,但他们会跳过严肃的箍,或者接受一个大概的答案。
继续使用k-means示例,我想,你可以在一个MapReduce作业中进行循环的每次迭代。即,Mappers将点分配给集群,reducers重新计算均值。这是"跳过篮球"因为你必须在MapReduce作业之间进行通信,你最终可能会运行许多工作:效率不高。
或者,您也可以让每个映射器对子集执行k-means,然后使用单个reducer执行k-means,并使用映射器中的均值作为输入。你会得到一个近似的答案,但它会很有效并自然地转换为MapReduce。
答案 1 :(得分:0)
您可以使用map reduce执行相关任务 - 您“只是”无法有效地执行它们。例如图形相关的算法。
请注意,使用Hadoop 2和YARN,您可以运行替换来映射/缩小,例如Tez和Spark,以便更好地处理此类算法