2

在 Hadoop 中运行 map-reduce 作业后,结果是一个包含部分文件的目录。零件文件的数量取决于减速器的数量,可以达到几十个(在我的例子中是 80 个)。

保留多个部分文件会影响未来 map-reduce 操作的性能,是好是坏?采取额外的减少步骤并合并所有部分会提高还是降低进一步处理的速度?

请仅参考 map-reduce 性能问题。我不关心以任何其他方式拆分或合并这些结果。

4

2 回答 2

1

在零件目录上运行进一步的 mapreduce 操作应该对整体性能几乎没有影响。

原因是 Hadoop 所做的第一步是根据大小将输入目录中的数据拆分,并将拆分后的数据放到 Mappers 上。由于它已经将数据拆分为单独的块,拆分一个文件与多个文件不应该影响性能,通过网络传输的数据量应该大致相等,处理量和磁盘时间也应该大致相等。

可能有一些退化的情况,部分文件会变慢。例如,您拥有数千/数百万个零件文件,而不是 1 个大文件。我还可以想到拥有许多零件文件会更快的情况。例如,如果您没有可拆分的文件(除非您使用某些压缩方案,否则通常不会出现这种情况),那么您必须将 1 个大文件放在一个映射器上,因为它是不可拆分的,其中许多部分文件将是或多或少地分布正常。

于 2013-05-12T08:19:14.620 回答
0

这一切都取决于下一个任务需要做什么。

如果您有分析数据并且每个(部分处理的)输入日有 80 个文件,那么如果下一项工作需要合并过去两年的数据,那么您将面临巨大的性能问题。

但是,如果您只有那 80 个,那么我不会担心。

于 2013-05-12T18:37:36.963 回答