【发布时间】:2013-03-06 23:43:18
【问题描述】:
我有一个问题,我基本上想做这样的事情:
public void reduce(Text key, Iterable<Text> iterValues, Context context){
for (Text val : iterValues){
//do something
}
iterValues.reset()
for (Text val : iterValues){
//do something else
}
}
我知道最好避免这些情况,或者简单地在内存中实例化对象,但我遇到了一个问题,我可能有太多东西要保存在内存中,并且在结构上会变得更加复杂而无法破解这可以分成更多的 reduce 步骤。
似乎不是我一个人在寻找这个功能,事实上,这是一个不久前实现的功能: https://issues.apache.org/jira/browse/HADOOP-5266
MarkableIterator 类似乎正是我正在寻找的:http://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapreduce/MarkableIterator.html
但它似乎只在 hadoop 2.0.3-alpha 中可用。我希望在仅支持 1.0.3(我目前使用的)或 0.20.205 的 EMR 中运行它。我一直在尝试各种事情,但我在 1.0.3 中没有找到任何可以为我提供类似功能的东西。我最接近的是使用 StreamBackedIterator,它仍然在内存中累积对象,但似乎比 ArrayList 内存效率更高。
是否有人知道在 Hadoop 1.0.3 中执行此操作的方法?
【问题讨论】:
标签: java hadoop iterator mapreduce amazon-emr