2012-03-01 63 views
0

我有一个分层目录,每个目录中有很多文件,并且每个文本文件中都有很多URL字符串。我想要在Hadoop中的所有文件中下载所有URL以获得更好的平衡。例如,如果我有1 + 5个节点Hadoop集群和5个URL,那么是5个URL合一文件或1个URL每个文件(然后获取5个文件)作为输入获得更好的平衡?如何拆分输入集以获得更好的Hadoop余额?

我认为Hadoop会默认将输入集合分割为64M块来运行在单个节点上,不能运行全部5个从站。

谢谢你的回答!

回答

3

如果你没有在每个URL上做很多计算密集的东西,并且你的文件大小是64 MB,那么在一个节点上只运行一个映射器可能会更好。在这种情况下,我会使用一种文件方式处理所有网址。

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

您也可以尝试服用CombineFileInputFormat方法