在MR job中,可以使用FileInputFormat和FileOutputFormat来对输入路径和输出路径进行设置。
在输出目录中,框架自己会自动对输出文件进行组织和命名:
一般情况下,Hadoop中每个Reducer对一个相同key的value做归并后,产生一个输出文件,并且文件以part-r-00000,part-r-00001的方式命名;
但是如果需要人为控制Reducer端输出文件名称(name-r-nnnnn命名,name是指定的名字,nnnnn是分区号),
或者一个Reducer输出多个文件,需要用到MR框架中的MutipleOutputs,用法如下。
第一个参数name是文件名,key和outputValue都是Text类型
第四个参数指定输出文件目录,命名格式为baseOutputPath-r-nnnnn
输入和输出文件目录都是HDFS路径
@Override protected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException { mos.write("daytask", key, outputValue, outputDir); }五个参数分别是:job、文件名、MR中输出文件类型(二进制)、输出key类型、输出value类型
@Override public int run(String[] args) throws Exception { 设置job(conf) MultipleOutputs.addNamedOutput( job, "daytask", SequenceFileOutputFormat.class, Text.class, Text.class); } }
