如何拆分输入集以获得更好的Hadoop平衡?

时间:2012-03-01 15:02:28

标签: hadoop balance

我有一个分层目录,每个目录中有很多文件,每个文本文件中都有很多URL字符串。我想下载Hadoop中所有文件中的所有URL,以便更好地平衡。

例如,如果我有1 + 5个节点的Hadoop集群,那么5个URLs.So,是5-URL-in-one文件或1-URL-per-file(然后获得5个文件)作为输入获取更好的平衡?

我认为Hadoop默认会将输入集拆分为64M块,仅在单个节点上运行,无法运行所有5个从属。

谢谢你的回答!

1 个答案:

答案 0 :(得分:3)

如果你没有在每个网址上做很多计算密集型的东西,那么你的文件就不多了。 64 MB,那么只需在一个节点上运行一个映射器就可能会更好。在这种情况下,我会在一个文件方法中使用所有URL。

最好有更大的文件,以便每个映射器都有足够的工作要做。如果您的文件非常小,则将它们合并以使总数更接近64 MB标记。这也将允许更多数据存储在HDFS中,因为每个文件占用Namenode上的RAM以保存元数据,并且RAM是有限的,因此如果您使用较少数量的文件,则可以将更多数据输入群集和Namenode将占用较少的RAM。

您也可以尝试采用CombineFileInputFormat方法