Hadoop 多输入和多输出研究(如何在Job History中获取相关信息)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leishenop/article/details/71646528

Hadoop FileInputFormat多输入

使用FileInputFormat来指定多个输入.当我们使用

FileInputFormat.setInputPaths(JobConf conf, Path... inputPaths)
FileInputFormat.addInputPaths(JobConf conf, String commaSeparatedPaths)

来设定有多个输入路径的时候,首先第一点,这多个输入路径都是使用的同一个Mapper来运行。然后配置参数中,key是”mapreduce.input.fileinputformat.inputdir”,不同的输入路径通过”,”来进行分割的多个路径。所以,这种情况下的多输入可以在Job History的已经完成的Job的配置文件里面,来查找”mapreduce.input.fileinputformat.inputdir”的标签对应的值,然后通过”,”来进行分割就可以找到输入。

通过程序代码的测试,下面是我通过FileInputFormat来设置多个输入路径在配置文件中的值。
程序中的部分代码:

 FileInputFormat.setInputPaths(job,new Path("/tmp/data1.txt"),new   Path("/tmp/data2.txt"),new Path("/tmp/data3.txt"));
 System.out.println(job.getConfiguration().get("mapreduce.input.fileinputformat.inputdir"));

因为是本地文件,所以是file开头,如果是hdfs文件,应该是hdfs开头。下面是输出的结果:

file:/tmp/data1.txt,file:/tmp/data2.txt,file:/tmp/data3.txt

Hadoop MultipleInputs 多输入

上面的那种情况是有很多的输入路径,但是他们都只能使用相同的Mapper来进行相应的逻辑上的处理。使用MultipleInputs可以为每个路径指定不同的InputFormat和Mapper类。

MultipleInputs.addInputPath(Job job, Path path,Class<? extends InputFormat> inputFormatClass)

我们如果在配置文件中进行获取该配置项的话,要使用mapreduce.input.multipleinputs.dir.formats来获取。下面是代码测试。这里是部分代码:

 MultipleInputs.addInputPath(job,new Path("/tmp/data1.txt"), TextInputFormat.class,WordMapper.class);
            MultipleInputs.addInputPath(job,new Path("/tmp/data2.txt"), TextInputFormat.class,TestMapper.class);
            MultipleInputs.addInputPath(job,new Path("/tmp/data3.txt"), TextInputFormat.class,WordMapper.class);
            MultipleInputs.addInputPath(job,new Path("/tmp/data4.txt"), TextInputFormat.class,WordMapper.class);
            System.out.println(job.getConfiguration().get("mapreduce.input.multipleinputs.dir.formats"));

输出的结果:

/tmp/data1.txt;org.apache.hadoop.mapreduce.lib.input.TextInputFormat,/tmp/data2.txt;org.apache.hadoop.mapreduce.lib.input.TextInputFormat,/tmp/data3.txt;org.apache.hadoop.mapreduce.lib.input.TextInputFormat,/tmp/data4.txt;org.apache.hadoop.mapreduce.lib.input.TextInputFormat

Hadoop MultipleOutputFormat

有时候,我们使用Hadoop处理数据时,在Reduce阶段,我们可能想对每一个输出的key进行单独输出一个目录或文件,这样方便数据分析,比如根据某个时间段对日志文件进行时间段归类等等。这时候我们就可以使用MultipleOutputs类,来搞定这件事.
这里我在指定的输出目录下面,指定了三个文件,hello,world,game三个文件,把一个reducer中的数据,输出到了这三个文件中。
title

所以,可以通过mapreduce.output.fileoutputformat.outputdir在history server相应的xml中找到其对应的文件夹,进行文件的遍历。

猜你喜欢

转载自blog.csdn.net/leishenop/article/details/71646528