Hadoop DistributedCache 无法报告状态

Posted

技术标签:

【中文标题】Hadoop DistributedCache 无法报告状态【英文标题】:Hadoop DistributedCache failed to report status 【发布时间】: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?

【问题讨论】:

【参考方案1】:

您能否在您的设置方法中添加一些调试打印信息以检查它是否在此方法中超时(记录进入和退出时间)?

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

【讨论】:

以上是关于Hadoop DistributedCache 无法报告状态的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop DistributedCache使用案例

Hadoop DistributedCache分布式缓存的使用

Hadoop 2.x 中的分布式缓存

添加外部Jar时Hadoop NoClassDefFoundError

目录是不是由 Hadoop 缓存符号链接处理?

使用 DistributedCache 访问 MapFile 时出现 FileNotFoundException