多平台统一管理软件接口,如何实现多平台统一管理软件接口
365
2022-11-06
【MapReduce】MR 框架原理 之 OutputFormat 数据输出
文章目录
常见的OutputFormat实现类
☠自定义OutputFormat
案例
▪ 需求分析▪ 代码实现
自定义FilterOutputFormatMapper阶段Reducer阶段Driver阶段
OutputFormat是MR输出的基类,所有实现MR输出都实现了OutputFormat接口。
常见的OutputFormat实现类
1.文本输出TextOutputFormat
默认的输出格式是TestOutputFormat,它把每条记录写为文本行。它的键和值可以是任意类型,因为TestOutputFormat调用 toString()方法把它们转换为字符串。
2.SequenceFileOutputFormat
将SequenceFileOutputFormat输出作为后续MR任务的输入,这便是一种好的输出格式,因为它格式紧凑,很容易被压缩
3.自定义OutputFormat
根据用户需求,自定义实现输出
案例
▪ 需求分析
返回顶部
▪ 代码实现
自定义FilterOutputFormat
继承自FileOutputFormat,同时泛型应当与Reduce一致。同时重写RecordWriter,自定义输出流。
package 第三章_MR框架原理.OutputFormat数据输出;import org.apache.hadoop.io.NullWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.RecordWriter;import org.apache.hadoop.mapreduce.TaskAttemptContext;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class FilterOutputFormat extends FileOutputFormat
package 第三章_MR框架原理.OutputFormat数据输出;import org.apache.hadoop.fs.FSDataOutputStream;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IOUtils;import org.apache.hadoop.io.NullWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.RecordWriter;import org.apache.hadoop.mapreduce.TaskAttemptContext;import java.io.IOException;public class FliterRecordWriter extends RecordWriter
返回顶部
Mapper阶段
读取数据,由于不需要进行内部操作,直接写出
package 第三章_MR框架原理.OutputFormat数据输出;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.NullWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;public class FilterMapper extends Mapper
返回顶部
Reducer阶段
reducer阶段只是将读取的数据输出,这里注意将读取的内容进行格式化,增加换行,否则最终文件以字符串追加形式,一整行展现。
package 第三章_MR框架原理.OutputFormat数据输出;import org.apache.hadoop.io.NullWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;public class FilterReducer extends Reducer
返回顶部
Driver阶段
package 第三章_MR框架原理.OutputFormat数据输出;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.NullWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;public class FilterDriver { public static void main(String[] args) { Job job = null; Configuration conf = new Configuration(); try { // 获取job job = Job.getInstance(conf); // 配置 job.setMapperClass(FilterMapper.class); job.setReducerClass(FilterReducer.class); job.setJarByClass(FilterDriver.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(NullWritable.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(NullWritable.class); // 将自定义的输出格式组件设置到job中 job.setOutputFormatClass(FilterOutputFormat.class); // 设置输入输出路径 // 虽然我们自定义了outputformat,但是因为我们的outputformat继承自fileoutputformat // 而fileoutputformat要输出一个_SUCCESS文件,所以,在这还得指定一个输出目录 FileInputFormat.setInputPaths(job,new Path("G:\\Projects\\IdeaProject-C\\MapReduce\\src\\main\\java\\第三章_MR框架原理\\OutputFormat数据输出\\log.txt")); FileOutputFormat.setOutputPath(job,new Path("G:\\Projects\\IdeaProject-C\\MapReduce\\src\\main\\java\\第三章_MR框架原理\\Filteroutput")); // 提交job boolean result = job.waitForCompletion(true); System.exit(result ? 0 : 1); } catch (Exception e){ e.printStackTrace(); } }}
返回顶部
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~