我是靠谱客的博主 明理柠檬,最近开发中收集的这篇文章主要介绍MapReduce重写FileInputFormat和FileOutputFormat,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部