我有一个分层目录,每个目录中有很多文件,每个文本文件中有很多 URL 字符串。我想下载 Hadoop 中所有文件中的所有 URL,以实现更好的平衡。
例如,如果我有 1+5 个节点的 Hadoop 集群和 5 个 URL。那么,是 5 个 URL 合一个文件还是 1 个 URL 每个文件(然后得到 5 个文件)作为输入获取更好的平衡?
我认为 Hadoop 默认会将输入集拆分为 64M block 以仅在单个节点上运行,无法运行所有 5 个从属节点。
感谢您的回答!
最佳答案
如果您没有对每个 URL 进行计算密集型工作,并且您的文件小于 64 MB,那么您最好只在一个节点上运行一个映射器。在那种情况下,我会在一个文件方法中使用所有 URL。
最好有更大的文件,这样每个映射器都有足够的工作要做。如果您的文件非常小,则合并它们以使总数接近 64 MB 标记。这也将允许更多的数据存储在 HDFS 中,因为每个文件占用 Namenode 上的 RAM 来保存元数据,而 RAM 是有限的,所以如果你使用较少数量的文件,你可以将更多的数据放入集群和你的 Namenode将使用更少的 RAM。
您也可以尝试使用 CombineFileInputFormat方法
关于hadoop - 如何拆分输入集以获得更好的 Hadoop 平衡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9518505/