gpt4 book ai didi

hadoop - 一个映射器或一个缩减器来处理一个文件或目录

转载 作者:可可西里 更新时间:2023-11-01 14:45:05 25 4
gpt4 key购买 nike

我是 Hadoop 和 MapReduce 的新手。我在其中有一些目录和文件(每个文件 10 MB 大,N 可能是 100。文件可能被压缩或未压缩),例如:我的目录 1/文件 1我的目录 1/文件 2...我的目录 1/文件 N

MyDir2/文件 1我的目录 2/文件 2...我的目录 3/文件 N

我想设计一个 MapReduce 应用程序,其中一个映射器或缩减器将处理整个 MyDir1,即我不希望 MyDir1 被拆分到多个映射器。同样,我希望 MyDir2 完全由其他映射器/缩减器处理而无需拆分。

关于如何解决这个问题的任何想法?我是否需要编写自己的 InputFormat 并读取输入文件?

最佳答案

实现FileInputFormat#isSplitable() .然后输入文件不会被拆分,每个 map 处理一个文件。请注意,完成作业的时间取决于处理最大输入文件的时间,尽管映射器是并行执行的。此外,这可能效率不高,因为节点之间会有大量数据混洗。

import org.apache.hadoop.fs.*;
import org.apache.hadoop.mapred.TextInputFormat;
public class NonSplittableTextInputFormat extends TextInputFormat {
@Override
protected boolean isSplitable(FileSystem fs, Path file) {
return false;
}
}

当前的 API 不允许单个映射器处理整个目录。您可能必须自己编写 InputFormat .或者创建一个要处理的目录列表,并将单个目录传递给每个要处理的映射器,这同样是低效的,因为节点之间的数据混洗。

回到 reducer,它们对来自映射器的输出 KV 对进行操作,而不是对输入文件/目录进行操作。

关于hadoop - 一个映射器或一个缩减器来处理一个文件或目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8831303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com