【发布时间】:2012-02-15 11:56:56
【问题描述】:
在 Hadoop 作业中,我正在映射多个 XML 文件并过滤每个元素 (from < id>-tags) 的 ID。由于我想将作业限制为一组特定的 ID,因此我读入了一个大文件(2.7 GB 中大约有 2.5 亿行,每行只有一个整数作为 ID)。所以我使用了 DistributedCache,在 Mapper 的 setup() 方法中使用 BufferedReader 解析文件,并将 ID 保存到 HashSet。
现在当我开始工作时,我得到了无数
Task attempt_201201112322_0110_m_000000_1 failed to report status. Killing!
在执行任何地图作业之前。
集群由 40 个节点组成,由于 DistributedCache 的文件在执行该作业的任何任务之前被复制到从节点,我假设失败是由大的 HashSet 引起的。我已经将mapred.task.timeout 增加到 2000s。当然我可以把时间加长一些,但其实这段时间应该够了吧?
由于DistributedCache's 曾经是一种“有效地分发大型只读文件”的方法,我想知道是什么导致了这里的失败,以及是否有另一种方法可以将相关 ID 传递给每个 map-job?
【问题讨论】:
标签: hadoop mapreduce distributed-cache