在 Hadoop 作业中,我正在映射多个 XML 文件并为每个元素过滤一个 ID (from < id>-tags)
。由于我想将作业限制为一组特定的 ID,因此我读入了一个大文件(2.7 GB 中大约有 2.5 亿行,每行只有一个整数作为 ID)。所以我使用了一个分布式缓存,在 Mapper 的方法中使用 BufferedReader 解析文件setup()
并将 ID 保存到 HashSet。
现在当我开始工作时,我得到了无数
Task attempt_201201112322_0110_m_000000_1 failed to report status. Killing!
在执行任何地图作业之前。
集群由 40 个节点组成,并且由于在DistributedCache
执行作业的任何任务之前将 a 的文件复制到从节点,我假设失败是由大型HashSet
. 我已经增加到mapred.task.timeout
2000s。当然我可以把时间再提高一点,但实际上这段时间应该足够了,不是吗?
由于DistributedCache's
曾经是一种“有效地分发大型只读文件”的方法,我想知道是什么导致了这里的失败,以及是否有另一种方法可以将相关 ID 传递给每个地图作业?