Hadoop DistributedCache无法报告状态

时间:2012-02-15 11:56:57

标签: hadoop mapreduce distributed-cache

在hadoop作业中,我正在映射多个XML文件并过滤每个元素的ID(来自  < ID>标签都有效)。由于我想将作业限制为一组ID,我在一个大文件中读取(2.7 GB中大约2.5亿行,每行只有一个整数作为ID)。所以我使用DistributedCache,使用BufferedReader在Mapper的setup()方法中解析文件,并将ID保存到HashSet。

现在,当我开始工作时,我得到了无数

Task attempt_201201112322_0110_m_000000_1 failed to report status. Killing!

在执行任何map-job之前

群集由40个节点组成,并且由于在执行任务的任务之前将DistributedCache的文件复制到从属节点,我假设失败是由大HashSet引起的。我已经将mapred.task.timeout增加到了2000年。当然我可以提高时间,但实际上这段时间应该足够了,不应该吗?

由于DistributedCache用于“有效地分发大型只读文件”,我想知道是什么原因造成了这里的失败以及是否有另一种方法将相关ID传递给每个地图作业?

谢谢, 斯坦

1 个答案:

答案 0 :(得分:0)

您可以在设置方法中添加一些调试printlns来检查它是否在此方法中超时(记录进入和退出时间)?

您可能还希望使用BloomFilter来保存ID。您可以将这些值存储在具有良好误报率(~0.5%)的50MB bloom过滤器中,然后运行辅助作业来执行对实际参考文件进行分区检查。