温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

十四、MapReduce--OutputFormat和RecordWriter抽象类

发布时间:2020-08-02 17:22:32 来源:网络 阅读:415 作者:隔壁小白 栏目:大数据

一、基本原理

​ reduce执行完毕之后,每个reduce都会将KV输出到一个文件中。那么KV输出到文件中时是以什么格式输出的呢?这就涉及到两个抽象类:OutputFormat和RecordWriter。

1、OutputFormat

public abstract class OutputFormat<K, V> {
    public OutputFormat() {
    }

public abstract RecordWriter<K, V> getRecordWriter(TaskAttemptContext var1) throws IOException, InterruptedException;

    public abstract void checkOutputSpecs(JobContext var1) throws IOException, InterruptedException;

    public abstract OutputCommitter getOutputCommitter(TaskAttemptContext var1) throws IOException, InterruptedException;
}

其实主要就是创建RecordWriter对象。

2、RecordWriter

public abstract class RecordWriter<K, V> {
    public RecordWriter() {
    }

    //将KV写入到输出流
    public abstract void write(K var1, V var2) throws IOException, InterruptedException;

    //关闭流
    public abstract void close(TaskAttemptContext var1) throws IOException, InterruptedException;
}

主要就是write方法,将KV写入到文件中。

二、常用的OutputFormat实现类

1、TextOutputFormat

​ 继承 FileOutputFormat,返回的RecordWriter是TextOutputFormat.LineRecordWriter。将每个KV转换为文本的每一行。可以定义key和value在文本中的分隔符,默认是“\t”。

2、SequenceFileOutputFormat

​ 同样继承于FileOutputFormat,返回的RecordWriter是一个匿名内部类,直接将所有的KV以追加的方式写入到文本中,不另外分行(除非原先数据中带有换行)。
​ SequenceFileOutputFormat将它的输出写为一个顺序文件。如果输出需要作为后续 MapReduce任务的输入,这便是一种好的输出格式,因为它的格式紧凑,很容易被压缩。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI