5、自定义FileOutputFormat分类输出
2016-12-03 00:00
363 查看
#应用场景:
我们的map和reduce的输出路径默认就是FileOutPutFormat.setOutPutPath();指定的那个路径,
但是有的时候我们的代码需要对结果进行分类输出,比如错误的信息输出到一个文件中,而正确的输出
到另一个文件中。这样就需要自己去改写一个FileOutPutFormat类来分类指定。
#实现:
public class EnhanceOutputFormat extends FileOutputFormat<Text, NullWritable>{
@Override
public RecordWriter<Text, NullWritable> getRecordWriter(TaskAttemptContext context) throws IOException, InterruptedException {
Path tocrawlPath = new Path("d:/flow/crawlout/tocrawl.log");
Path enhancedPath = new Path("d:/flow/enhanced/enhanced.log");
FileSystem fs = FileSystem.get(context.getConfiguration());
FSDataOutputStream tocrawlOs = fs.create(tocrawlPath);
FSDataOutputStream enhancedOs = fs.create(enhancedPath);
#应用:
##第二句还是需要的?因为fileinputformat的最终结果还有一个secusses的文件,需要默认指定到哪里。
我们的map和reduce的输出路径默认就是FileOutPutFormat.setOutPutPath();指定的那个路径,
但是有的时候我们的代码需要对结果进行分类输出,比如错误的信息输出到一个文件中,而正确的输出
到另一个文件中。这样就需要自己去改写一个FileOutPutFormat类来分类指定。
#实现:
public class EnhanceOutputFormat extends FileOutputFormat<Text, NullWritable>{
@Override
public RecordWriter<Text, NullWritable> getRecordWriter(TaskAttemptContext context) throws IOException, InterruptedException {
Path tocrawlPath = new Path("d:/flow/crawlout/tocrawl.log");
Path enhancedPath = new Path("d:/flow/enhanced/enhanced.log");
FileSystem fs = FileSystem.get(context.getConfiguration());
FSDataOutputStream tocrawlOs = fs.create(tocrawlPath);
FSDataOutputStream enhancedOs = fs.create(enhancedPath);
return new EnhanceRecordWriter(tocrawlOs,enhancedOs); } static class EnhanceRecordWriter extends RecordWriter<Text, NullWritable>{ FSDataOutputStream tocrawlOs = null; FSDataOutputStream enhancedOs = null; public EnhanceRecordWriter(FSDataOutputStream tocrawlOs, FSDataOutputStream enhancedOs) { this.tocrawlOs = tocrawlOs; this.enhancedOs = enhancedOs; } /** * write方法是把mr程序输出的最后的结果kv写入外部存储系统的实现方法 */ @Override public void write(Text key, NullWritable value) throws IOException, InterruptedException { if(key.toString().contains("tocrawl")){ tocrawlOs.write(key.toString().getBytes()); }else{ enhancedOs.write(key.toString().getBytes()); } } @Override public void close(TaskAttemptContext context) throws IOException, InterruptedException { if(tocrawlOs!=null) tocrawlOs.close(); if(enhancedOs!=null) enhancedOs.close(); } } }
#应用:
##第二句还是需要的?因为fileinputformat的最终结果还有一个secusses的文件,需要默认指定到哪里。
相关文章推荐
- MR之自定义outputformat输出方式代码演示
- 自定义实现InputFormat、OutputFormat、输出到多个文件目录中去、hadoop1.x api写单词计数的例子、运行时接收命令行参数,代码例子
- Hadoop案例(五)过滤日志及自定义日志输出路径(自定义OutputFormat)
- FileOutputFormat
- hadoop学习;自定义Input/OutputFormat;类引用mapreduce.mapper;三种模式
- 在自己写的formatName基础上,写个,将时间转化为自定义的输出字符串格式信息
- RCFileOutputFormat设置ColumnNumber的顺序
- MapReduce的SequenceFileOutputFormat使用
- hadoop自定义InputFormat,OutputFormat输入输出类型
- Hadoop多文件输出:MultipleOutputFormat和MultipleOutputs深究(一)
- Mapreduce中的RCFile输出RCFileOutputFormat实现及其应用
- hadoop SequenceFileOutputFormat与LzopCodec压缩问题
- Asp.Net 无限分类生成表格 <后台自定义输出table>
- Hadoop多文件输出:MultipleOutputFormat和MultipleOutputs深究(一)
- 避免reduce输出为空文件的LazyOutputFormat
- hadoop学习;自定义Input/OutputFormat;类引用mapreduce.mapper;三种模式
- 【Hadoop】利用MultipleOutputs,MultiOutputFormat实现以不同格式输出到多个文件
- Output format of a 10046 sql trace file
- SequcenFileInputFormat SequenceFileOutputFormat例子
- sas输入输出数据的相关语句 output、 put、 remove、replace 、file 、infile