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

标签 hadoop balance

我有一个分层目录,每个目录中有很多文件,每个文本文件中有很多 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/

相关文章:

c# - Windows中带有MR2的NullPointerException

rpc - 比特币 RPC 获取钱包外地址余额

java - 平衡字符串正则表达式

python - 如何在 Python 2.7 中使用矩阵平衡化学方程式

hadoop - 如何将 Hive 表映射到 HBase?

performance - Zend最佳性能服务器

Scala:确保大括号是平衡的

hadoop - 如何从 Pig 中的关系生成自定义模式?

hadoop - 配置单元查询不适用于3个以上的分区