我刚刚开始学习Mapreduce,并且有一些我想回答的问题。开始:

1)情况1:FileInputFormat作为输入格式。输入路径是包含多个文件要处理的目录。如果我有n个文件,则所有文件都小于hadoop集群中的块大小。为map reduce Job计算出多少个分割?

2)我在名为MyFileInputFormat的类中扩展FileInputFormat,并且重写isSplitable以始终返回false。输入配置与上面相同。 在这种情况下,我会得到n个分割吗?

3)如果说n个文件中的1个文件略大于群集的块大小,那么在第二种情况下我会得到n + 1个分割吗?

先谢谢您的帮助!

最佳答案

让我们从FileInputFormat的基础开始

  • FileInputFormat是Abstract,因此您不能直接使用它。
    “公共(public)抽象类FileInputFormat”
  • 让我们假设您使用类似TextInputFormat的InputFormat(类TextInputFormat扩展了FileInputFormat)并回答您的问题。
  • FileInputFormat中的splitMethod逻辑适用于输入路径中的每个文件,因此MapReduce作业(Case1)中将有“N”个分割。
  • 对于Case2,您仍然会有N个分割,因为您刚刚通知inputformat不要分割单个文件。但是对于每个文件,请视为一个拆分。
  • 对于情况3,由于文件未被拆分,您仍将有N个拆分。请记住,分割逻辑应用于单个文件,而不是一起考虑。
  • CombineInputFormat是在拆分逻辑期间要合并输入文件时使用的格式。
  • 08-28 05:57