MapReduce 自定义outputFormat
来源:互联网 发布:华为荣耀4x手机套淘宝 编辑:程序博客网 时间:2024/05/29 13:58
写一个类继承 FileOutputFormat 泛型为最终输出的数据类型
public class MyFileOutputFormat extends FileOutputFormat<Text, NullWritable> {
重写getRecordWriter(TaskAttemptContext context)方法
maptask或者reducetask在最终输出时,先调用OutputFormat的getRecordWriter方法拿到一个RecordWriter 然后再调用RecordWriter的write(k,v)方法将数据写出
@Override public RecordWriter<Text, NullWritable> getRecordWriter(TaskAttemptContext context) throws IOException, InterruptedException {
public class LogEnhanceOutputFormat extends FileOutputFormat<Text, NullWritable> { @Override public RecordWriter<Text, NullWritable> getRecordWriter(TaskAttemptContext context) throws IOException, InterruptedException { FileSystem fs = FileSystem.get(context.getConfiguration()); Path enhancePath = new Path("D:/temp/en/log.dat"); Path tocrawlPath = new Path("D:/temp/crw/url.dat"); FSDataOutputStream enhancedOs = fs.create(enhancePath); FSDataOutputStream tocrawlOs = fs.create(tocrawlPath); return new EnhanceRecordWriter(enhancedOs, tocrawlOs); } /** * 构造一个自己的recordwriter * * @author * */ static class EnhanceRecordWriter extends RecordWriter<Text, NullWritable> { FSDataOutputStream enhancedOs = null; FSDataOutputStream tocrawlOs = null; public EnhanceRecordWriter(FSDataOutputStream enhancedOs, FSDataOutputStream tocrawlOs) { super(); this.enhancedOs = enhancedOs; this.tocrawlOs = tocrawlOs; } @Override public void write(Text key, NullWritable value) throws IOException, InterruptedException { String result = key.toString(); // 如果要写出的数据是待爬的url,则写入待爬清单文件 /logenhance/tocrawl/url.dat if (result.contains("tocrawl")) { tocrawlOs.write(result.getBytes()); } else { // 如果要写出的数据是增强日志,则写入增强日志文件 /logenhance/enhancedlog/log.dat enhancedOs.write(result.getBytes()); } } @Override public void close(TaskAttemptContext context) throws IOException, InterruptedException { if (tocrawlOs != null) { tocrawlOs.close(); } if (enhancedOs != null) { enhancedOs.close(); } } }}
// 要控制不同的内容写往不同的目标路径,可以采用自定义outputformat的方法 job.setOutputFormatClass(LogEnhanceOutputFormat.class); FileInputFormat.setInputPaths(job, new Path("D:/srcdata/webloginput/")); // 尽管我们用的是自定义outputformat,但是它是继承制fileoutputformat // 在fileoutputformat中,必须输出一个_success文件,所以在此还需要设置输出path FileOutputFormat.setOutputPath(job, new Path("D:/temp/output/")); // 不需要reducer job.setNumReduceTasks(0);
阅读全文
0 0
- MapReduce 自定义outputFormat
- Mapreduce编程三 自定义outputformat
- mapreduce系列(9)--自定义OutputFormat
- Mapreduce之自定义OutputFormat应用-日志增强
- 自定义OutPutFormat
- 自定义OutputFormat
- 自定义outputformat
- MapReduce之OutputFormat理解
- hadoop学习;自定义Input/OutputFormat;类引用mapreduce.mapper;三种模式
- hadoop学习;自定义Input/OutputFormat;类引用mapreduce.mapper;三种模式
- 自定义OutputFormat--Hadoop
- hadoop 自定义inputformat和outputformat
- 6 MapReduce之 InputFormat和OutputFormat
- hadoop自定义InputFormat,OutputFormat输入输出类型
- Mapreduce的InputFormat和OutputFormat类层次结构
- mapreduce多文件输出和多outputformat输出
- MapReduce-XML处理-定制OutputFormat及定制RecordWriter
- mapreduce-常见的inputformat实现类和outputformat实现类
- pytorch学习_1
- python中os.path模块的使用
- BootStrap下拉框,添加模糊搜索
- day10java基础
- spark 占位
- MapReduce 自定义outputFormat
- HTTP 协议 与 golang web 应用服务
- Java多线程的监控分析工具(VisualVM)
- iOS技术点
- XML数据解析
- spark 占位
- 最速下降法/梯度下降法
- 年化低于100%就死掉的现金贷,如见面对监管红线患上了尴尬癌
- SpringBoot和PostGIS环境搭建(Hibernate5)