MapReduce預設輸出的檔案名稱格式如下:part-r-00000
自定義名稱,比如editName,則輸出的檔案名稱為:editName-r-0000,此方法沒有徹底修改整個檔案名,隻修改了一部分
方法如下
重寫TextOutPutFormat的setOutPutName方法,因為setOutPutName是protected方法,是以隻能通過重寫的方式來修改
/**
*
*/
package com.zhen.outPutName;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.JobContext;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
/**
* @author FengZhen
* setOutputName是protected方法,是以無法直接調用,隻能自定義TextOutPutFormat重寫該方法
*/
public class MyOutPutFormat extends TextOutputFormat<Text, IntWritable>{
protected static void setOutputName(JobContext job, String name) {
job.getConfiguration().set(BASE_OUTPUT_NAME, name);
}
}
/**
*
*/
package com.zhen.outPutName;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
/**
* @author FengZhen
* hadoop jar /Users/FengZhen/Desktop/Hadoop/other/mapreduce_jar/OutPutNameTest.jar com.zhen.outPutName.OutPutNameTest /user/hadoop/mapreduce/combinerTest/input /user/hadoop/mapreduce/OutPutNameTest/output/
*/
public class OutPutNameTest {
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
Configuration configuration = new Configuration();
Job job = new Job(configuration, OutPutNameTest.class.getSimpleName());
job.setJarByClass(OutPutNameTest.class);
job.setMapperClass(MapTest.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);
job.setReducerClass(ReduceTest.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
//設定job的輸出類型
job.setOutputFormatClass(MyOutPutFormat.class);
job.setCombinerClass(ReduceTest.class);
job.setPartitionerClass(PartitionTest.class);
job.setNumReduceTasks(2);
//結果名稱如下:editName-r-00000,此方法隻能修改part這一段
MyOutPutFormat.setOutputName(job, "editName");
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
System.exit(job.waitForCompletion(true)?0:1);
}
}