Map器中的多输入文件夹位置

eagi6jfj  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(374)

有没有可能在驱动程序类中提供多个输入文件夹位置?
我有4个输入文件夹的位置,在这种情况下,我们可以指定我的驱动程序类中的所有4个文件夹的位置,使我的Map器可以读取数据从所有文件在这4个不同的文件夹。
谢谢。。。

zd287kbt

zd287kbt1#

如果这4个位置中的数据不同,那么您可能需要考虑创建4个不同的Map器类来读取它们。您的代码看起来与下面的示例类似。在执行jar时,将位置作为参数按顺序传递。

public class MultiplePaths {

public static void main(String[] args) throws Exception {

    JobConf conf = new JobConf(MultiplePaths.class);
    conf.setJobName("MultipleMappersPaths");

    conf.setMapOutputKeyClass(Text.class);
    conf.setMapOutputValueClass(Text.class);

    conf.setOutputKeyClass(Text.class);
    conf.setOutputValueClass(Text.class);

    MultipleInputs.addInputPath(conf,new Path(args[0]),TextInputFormat.class,LocationMapper1.class);
    MultipleInputs.addInputPath(conf,new Path(args[1]),TextInputFormat.class,LocationMapper2.class);
    MultipleInputs.addInputPath(conf,new Path(args[2]),TextInputFormat.class,LocationMapper3.class);
    MultipleInputs.addInputPath(conf,new Path(args[3]),TextInputFormat.class,LocationMapper4.class);

    FileOutputFormat.setOutputPath(conf, new Path(args[2]));
    JobClient.runJob(conf);

  }

}

否则,如果您必须从4个不同的位置读取类似的文件,那么您的代码应该类似于下面的示例。在执行jar时,将您的位置作为参数按顺序传递。

MultipleInputs.addInputPath(conf,new Path(args[0]),TextInputFormat.class,LocationMapper.class);
    MultipleInputs.addInputPath(conf,new Path(args[1]),TextInputFormat.class,LocationMapper.class);
    MultipleInputs.addInputPath(conf,new Path(args[2]),TextInputFormat.class,LocationMapper.class);
    MultipleInputs.addInputPath(conf,new Path(args[3]),TextInputFormat.class,LocationMapper.class);
i34xakig

i34xakig2#

可以使用multipleinputs类添加输入文件。

MultipleInputs.addInputPath(job, inputPath, TextInputFormat.class, MyMapper.class);

您可以将上述输入路径替换为文件位置,将textinputformat.class替换为输入文件格式,将mymapper.class替换为Map器类。
通过这种方式,您可以根据需要添加任意多的文件。

相关问题