Outputformat介绍
OutputFormat发生在ReduceTask之后,接收ReduceTask产生的数据,然后将结果按照指定格式来写出。OutputFormat是MapReduce输出的基类,所有实现MapReduce输出都实现了OutputFormat接口。
在MapReduce中,如果不指定,默认使用的是TextOutputFormat。 TextOutputFroamt继承了FileOutputFormat。其中,FileOutputFormat负责对输出路径进行校验,TextOutputFormat则是对数据进行写出。
在MapReduce中,也支持自定义输出格式以及多源数据,但是注意,实际开发中自定义输出格式以及多源输出用的非常少。
1、文本输出TextOutputFormat 默认的输出格式是TextOutputFormat,它把每条记录写为文本行。它的键和值可以是任意类型,疑问TextOutputFormat调用toString()方法把他们转换为字符串。
2、SequenceFileOutputFormat 将SequenceFileOutputFormat输出作为后续MapReduce任务的输入,这便是一种好的输出格式,因为它的格式紧凑,很容易被压缩。
3、自定义OutputFormat 根据用户需求,自定义实现输出。
它的作用是
a. 校验输出路径,例如检查输出路径不存在。
b. 提供输出流用于将数据写出。
案例自定义OutputFormat
1、使用场景 为了实现控制最终文件的输出路径和输出格式,可以自定义OutputFormat。
例如:要在一个MapReduce程序中根据数据的不同输出两类结果到不同的目录,这类灵活的输出需求可以通过自定义OutputFormat来实现。
2、自定义OUtputFormat步骤 (1)自定义一个类继承FileOutputFormat。 (2)改写RecordWriter,具体改写输出数据的方法write()。
数据准备,有订单数据如下:ordersource.txt
mobile,20241214,orderid1231231
windows,20241213,orderid1231232
我们将含有mobile数据放到 mobile.log里,将含有windows数据放到windows.log里
编写程序如下
自定义format类
package outputf;
import org.apache.hadoop.io.NullWritable;
import java.io.IOException;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullW