概述
在mapreduce中默认的mapper输入时LongWritable和Text,reducer输出是part-r-00000文件。但是我们可以通过重写FileInputFormat和FileOutputFormat类来实现自定义的mapper输入和reducer输出。
1.自定义mapper输入是重写FileInputFormat和RecordReader类,而真正产生mapper输入的key和value是在RecordReader类中的实现的,通过getCurrentKey(),getCurrentValue()方法获取key和value,但是具体实现mapper类输入的key和value是通过重写initialize()方法和nextKeyValue()方法;让后FileInputFormat类返回一个RecordReader对象。
2.自定义reducer类输出是通过重写FileOutputFormat类和RecordWriter类实现的。具体操作是通过重写RecordWriter类中的write方法,然后通过FileOutFormat类返回一个RecordWriter对象。
本文章是实现读入整个html文件,获取每一个html文件中的title,并保存到自定义的title.txt文件中。
import java.io.IOException;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.InputSplit;
import org.apache.hadoop.mapreduce.RecordReader;
import org.apache.hadoop.mapreduce.TaskAttemptContext;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
/*
* 继承FileInputFormat类,重写里面的RecordReader()方法,返回一个自定义的
* recordreader类
*/
public class WholeFileInputFormat extends FileInputFormat<Text, Text>{
@Override
public RecordReader<Text, Text> createRecordReader(InputSplit arg0, TaskAttemptContext arg1)
throws IOException, InterruptedException {
RecordReader<Text, Text> recordReader=new WholeFileRecordRead();
return recordReader;
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.InputSplit;
import org.apache.hadoop.mapreduce.JobContext;
import org.apache.hadoop.mapreduce.RecordReader;
import org.apache.hadoop.mapreduce
最后
以上就是明理柠檬为你收集整理的MapReduce重写FileInputFormat和FileOutputFormat的全部内容,希望文章能够帮你解决MapReduce重写FileInputFormat和FileOutputFormat所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复