MapReduce重写FileInputFormat和FileOutputFormat

在mapreduce中默认的mapper输入时LongWritable和Text,reducer输出是part-r-00000文件。但是我们可以通过重写FileInputFormat和FileOutputFormat类来实现自定义的mapper输入和reducer输出。 1.自定义mapper输入是重写FileInputFormat和RecordReader类,而真正产生mapper输入的key和
摘要由CSDN通过智能技术生成

在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
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值