一 OutputFormat作用

1校验job中指定输出路径是否存在

2将结果写入输出文件

二 OutputFormat的实现

2.1DBOutputFormat: 发送Reduce结果到SQL表中

2.2FileOutputFormat: 将Reduce结果写入文件中

2.2.1MapFileOutputFormat: 主要是处理MapFile(特殊的SequenceFile)的输出

2.2.2SequenceFileOutputFormat: 主要是处理SequenceFile的输出

2.2.3TextFileOutputFormat: 主要是处理普通文本的输出,也是默认实现

2.3FilterOutputFormat:主要就是方便包装其他OutputFromat(没用过)

2.4NullOutputFormat: 把所有的输出放到/dev/null(没用过)

三 MultipleOutputs

在有些场景中,我们需要将Map-Reduce结果输出到多个文件中,我们就可以使用MapOutputs这个类。

MultipleOutputs的使用步骤:

3.1我们需要在Mapper中setup方法实例化MapOutputs

3.2在map方法中使用MapOutputs对象进行write, 并且需要把你的文件命传入write方法中

3.3在完成后需要在close方法中关闭MapOutputs

3.4最后生成的结果就是 你传入的文件名-m|r-0000这样的序列

public class OutputMultipleFile extends Configured implements Tool{

public static class OutputMultipleMapper extendsMapper<LongWritable, Text, Text, Text>{

private Text key1 = new Text();

private Text value1 = new Text();

private MultipleOutputs<Text, Text> mos;

@Override

protected void cleanup(Mapper<LongWritable, Text, Text,Text>.Context context)

throws IOException, InterruptedException {

super.cleanup(context);

mos.close();

}

@Override

protected void setup(Mapper<LongWritable, Text, Text,Text>.Context context)

throws IOException, InterruptedException {

super.setup(context);

mos = new MultipleOutputs<Text, Text>(context);

}

@Override

protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text,Text>.Context context)

throws IOException, InterruptedException {

if (value == null) {

return;

}

StringTokenizer tokenizer = new StringTokenizer(value.toString());

while (tokenizer.hasMoreTokens()) {

String token = tokenizer.nextToken();

key1.set(token);

value1.set("=>"+key1);

mos.write(key1, value1, generateFileName(key1));

}

}

private String generateFileName(Text key){

if (key == null) {

return "default";

}

int len = key.toString().length();

if (len <5) {

return "primary";

}

return "extended";

}

}

public int run(String[] args) throws Exception {

Configuration conf = new Configuration();

String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();

//对数组长度进行校验

if (otherArgs.length < 2) {

System.err.println("Usage:wordcount <in> [<in>...] <out>");

System.exit(2);

}

Job job = Job.getInstance(conf,this.getClass().getSimpleName());

//设置要运行的任务

job.setJarByClass(OutputMultipleFile.class);

//设置输入路径

Path in = new Path(args[0]);

FileInputFormat.addInputPath(job, in);

//设置输出路径

Path out = new Path(args[1]);

FileOutputFormat.setOutputPath(job, out);

//设置要运行的Mapper

job.setMapperClass(OutputMultipleMapper.class);

//设置Mapper的输出key和输出value的类型

job.setMapOutputKeyClass(LongWritable.class);

job.setMapOutputValueClass(Text.class);

job.setNumReduceTasks(0);

boolean isSuccess = job.waitForCompletion(Boolean.TRUE);

return isSuccess ? 0 : 1;

}

public static void main(String[] args) throws Exception {

int num = new Random().nextInt(1000);

if (args == null || args.length == 0) {

args = new String[]{

"hdfs://hdfs-cluster/user/hadoop/input",

"hdfs://hdfs-cluster/user/hadoop/output"+num

};

}

int status = new OutputMultipleFile().run(args);

System.exit(status);

}

}

MapReduce之OutputFormat理解相关推荐

  1. 大数据培训之核心知识点Hbase、Hive、Spark和MapReduce的概念理解、特点及机制等

    今天,上海尚学堂大数据培训班毕业的一位学生去参加易普软件公司面试,应聘的职位是大数据开发.面试官问了他10个问题,主要集中在Hbase.Spark.Hive和MapReduce上,基础概念.特点.应用 ...

  2. MapReduce优劣,理解MapReduce与Hadoop

    MapReduce是一种计算模型,用于大规模数据集(大于1TB)的并行运算.概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程 ...

  3. Hadoop3中实现MapReduce自定义OutputFormat

    由于MapReduce中默认的OutputFormat是TextOutputFormat,按行写入输出文件.但是对于我们实际应用场景中,对于Reduce的输出结果可能想要放到各种各样的输出目的地,可能 ...

  4. MapReduce之RecordWriter理解

    RecordWriter:其实主要就是负责将task的key/value结果写入内存或者磁盘 一 方法分析 1.1 write:写key/value键值对 1.2 close: 关闭RecordWri ...

  5. MapReduce之InputFormat理解

    一 InputFormat主要作用: #验证job的输入规范 #对输入的文件进行切分,形成多个InputSplit文件,每一个InputSplit对应着一个map任务 #创建RecordReader, ...

  6. MapReduce之RecordReader理解

    RecordReader:其作用就是将数据切分成key/value的形式然后作为输入传给Mapper. 一 方法分析: 1.1initialize: 初始化RecordReader,只能被调用一次. ...

  7. JAVA大数据(二) Hadoop 分布式文件系统HDFS 架构,MapReduce介绍,Yarn资源调度

    文章目录 1.分布式文件系统HDFS 1.HDFS的来源 2.HDFS的架构图之基础架构 2.1 master/slave 架构 2.2 名字空间(NameSpace) 2.3 文件操作 2.4副本机 ...

  8. 【大数据实验】06:MapReduce操作

    MapReduce操作 OVERVIEW MapReduce操作 实验环境 一.WordCount单词计数 1.实验内容 2.实验原理 3.实验步骤 (1)启动Hadoop集群 (2)准备数据文件 ( ...

  9. 2.2.1 hadoop体系之离线计算-mapreduce分布式计算-mapreduce架构概念

    目录 1.写在前面 2.为什么需要MapReduce? 3.MapReduce具体细节 3.1 Hadoop MapReduce构思: 4.block,split,map,reduce关系 5.Shu ...

最新文章

  1. flash h5录音_博乐h5网站建设案例-AI优网络
  2. 关于isset的一点说明
  3. 兼容ie9以下css3,hover和圆角(htc)
  4. python2异步编程_python异步编程 (转载)
  5. stripslashes和addslashes的区别
  6. python读写文件代码_Python 读写文件的操作代码
  7. 数据时代如何破局?看小企业里的“大计算”
  8. Server Transport model
  9. 关于Jqueryweui 的select联动用法
  10. SAP-如何学好SAP BASIS
  11. python网易云_Python分析网易云音乐近5年热门歌单
  12. CSDN Markdown编辑器 图片对齐方式(居中/左对齐/右对齐)及图片大小
  13. WinCC 高速数据采集的实现
  14. 远程网络教学系统功能(用例图)
  15. Amazon Web Services: Networking AWS:网络 Lynda课程中文字幕
  16. 新型知识管理工具-Baklib,比起语雀我更喜欢它
  17. 软件安全实验——lab10(二、TCP/IP攻击实验)
  18. 借记卡和贷记卡有什么区别?
  19. Jprofile连接远程机器
  20. OCR文字识别工具 AIScanner

热门文章

  1. 【系统架构设计师】软考高级职称,一次通过,倾尽所有,2016年下半年系统架构设计师考试论文真题(论述软件设计模式技术及应用)
  2. docker(应用容器引擎)
  3. 乌班图安装pycharm
  4. 5-9轻量型网络结构
  5. jq中ajax请求跨域,用JQuery实现简单的Ajax跨域请求
  6. 装Oracle10时报错,win10系统安装oracle10g时出现未知错误的详细教程
  7. mysql5.7存储过程实例_MySQL 存储过程简单实例
  8. mysql数据库常见问题_初学者必读 MySQL数据库常见问题汇总
  9. matplotlib中color可用的颜色
  10. 鸿蒙JSFA 使用 WebView