Hadoop HDFS - 保留很多部分文件或concat?

时间:2013-05-12 05:56:34

标签: hadoop mapreduce hdfs

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

保留多个部分文件是否会影响未来map-reduce操作的性能,无论好坏?是否采取额外的减少步骤并合并所有部件会改善或加剧进一步处理的速度?

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

这完全取决于下一个任务需要做什么。

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

如果你只有那些80,那我就不用担心了。