【发布时间】:2013-11-21 20:10:48
【问题描述】:
考虑以下问题:
编辑:如果下面的算法没有多大意义,请忽略。我只是为了它而把它放在那里。这个想法是 doFunc 在某种程度上是递归的。
doFunc(A):
[a0, a1, a2, ...] <- A
If (someCondition([a0, a1, a2, ...]) == False)
A <- modified(A)
r = doFunc(modified(A))
A <- convertR(r)
B <- someFunc1(A)
C <- someFunc2(B)
r <- lastFunc(D)
return r
在这种情况下,r 是递归函数 doFunc 的结果,其中 a0, a1, a2, ... 列表中的 someCondition 是 false,函数递归以获得某种最优 A,其条件为true.
现在考虑 MapReduce 可以单独应用于程序的不同部分 - 例如将 A 转换为 a0, a1, a2, ... 然后获取 modifiedA 然后 someFuncI 都可以使用 MapReduce,如何递归适合这个 MapReduce 实现吗?
考虑到这一点,Hadoop Streaming 是不可能的,因为我不明白如何使用递归来实现它。唯一的另一种可能性是使用某种形式的 Python Hadoop Streaming Wrapper,例如 dumbo 或 mrjob 编写代码,忽略递归调用 doFunc 时显然会展开的代码。我想知道 MapReduce 是如何影响这些因素的,以及可扩展性是什么样的。
问题:我已经在上面的文字中提出了问题,但它们可能不够清楚。所以我会把它们放在这里。
- MapReduce 在递归方面表现良好吗?
- 如果是,它是否可以很好地扩展?
- 有没有办法使用涉及递归的函数来实现 Hadoop Streaming?
【问题讨论】:
-
Python 标签与这个问题无关。 MRjob 是 Hadoop API 的封装,服务于基于 python 的作业运行和监控的需求,并且不添加任何额外的功能,Hadoop 框架中没有提供
标签: java hadoop recursion mapreduce