我有一个分层目录,每个目录中有很多文件,每个文本文件中有很多 URL 字符串。我想下载 Hadoop 中所有文件中的所有 URL 以获得更好的平衡。
例如,如果我有 1+5 个节点的 Hadoop 集群和 5 个 URL。那么,是 5-URLs-in-one 文件还是 1-URL-per-file(然后得到 5 个文件)作为输入获得更好的平衡?
我认为 Hadoop 默认将输入集拆分为 64M 块以仅在单个节点上运行,不能运行所有 5 个从属节点。
谢谢你的回答!
如果您没有在每个 URL 上进行非常计算密集的工作,并且您的文件小于 64 MB,那么您最好只在单个节点上运行一个映射器。在这种情况下,我会使用一个文件方法中的所有 URL。
最好有更大的文件,这样每个映射器都有足够的工作要做。如果您的文件非常小,请合并它们以使总大小更接近 64 MB 标记。这也将允许更多的数据存储在 HDFS 中,因为每个文件都占用 Namenode 上的 RAM 来保存元数据,而 RAM 是有限的,所以如果你使用较少数量的文件,你可以将更多的数据放入集群和你的 Namenode将使用更少的 RAM。
您也可以尝试采用CombineFileInputFormat方法