目录

  • MapReduce定义
  • MapReduce优缺点
  • 优点
  • 缺点
  • MapReduce核心编程思想
  • MapReduce进程
  • 常用数据序列化类型
  • MapReduce编程规范
  • Mapper阶段
  • Reducer阶段
  • Driver阶段
  • OutputFormat接口实现类


MapReduce定义

MapReduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架;

MapReduce核心功能是将用户编写的业务逻辑代码自带默认组件整合成一个完整的分布式运算程序,并发运行在一个hadoop集群上。

MapReduce优缺点

优点

1.易于编程。用户只关心业务逻辑、实现框架的接口;

2.良好的扩展性:可以动态增加服务器,解决计算资源不够用的问题;

3.高容错性:任何一台机器挂掉,都可以将任务转移到其他节点;

4.适合海量数据计算(TB/PB):几千台服务器共同计算。

缺点

1.不擅长实时计算;

2.不擅长流失计算;

3.不擅长DAG有向无环图计算。

MapReduce核心编程思想

mapreduce的结构由哪些 mapreduce的主要功能_mapreduce


MapReduce核心编程思想:

1.MapReduce运行程序一般需要分为2个阶段:Map阶段和Reduce阶段;

2.Map阶段的并发MapTask,完全并行运行,互不干涉;

3.Reduce阶段的兵法ReduceTask,完全互不相干,但是他们的数据依赖于上一个阶段的所有MapTask并发实例的输出;

4.MapReduce编程模型只能包含一个Map阶段和一个Reduce阶段,如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序,串行运行。

MapReduce进程

一个完整的MapReduce程序在分布式运行时有3类实例进程:

1.MrAppMaster: 负责整个程序的过程调度及状态协调;

2.MapTask: 负责Map阶段的整个数据处理流程;

3.ReduceTask: 负责Reduce阶段的整个数据处理流程。

常用数据序列化类型

mapreduce的结构由哪些 mapreduce的主要功能_mapreduce_02

MapReduce编程规范

用户编写的程序分为三个部分:Mapper、Reducer、Driver。

Mapper阶段

1.用户自定义分Mapper要继承自己的父类;
2.Mapper的输入数据是KV对的形式(KV的类型可自定义);
3.Mapper中的业务逻辑写在map()方法中;
4.Mapper的输出数据是KV对的形式(KV的类型可自定义);
5.Map()方法(Map Task进程)对每一个<K,V>调用一次。

Reducer阶段

1.用户自定义的Reducer要继承自己的父类;
2.Reducer的输入数据类型对应Mapper的输出数据类型,也是KV;
3.Reducer的业务逻辑写在reduce()方法中;
4.ReducerTask进程对每一组相同k的<k,v>组调用一次reduce()方法;

Driver阶段

相当于YARN集群的客户端,用于提交我们整个程序到YARN集群,提交的是封装了MapReduce程序相关运行参数的job对象。

wordcount词频统计案例==》

OutputFormat接口实现类

OutputFormat是MapReduce输出的基类,所有实现MapReduce输出都实现了OutputFormat接口。

  1. OutputFormat实现类
  2. mapreduce的结构由哪些 mapreduce的主要功能_big data_03

  3. 默认输出格式TextOutputFormat
  4. 自定义OutputFormat
    a. 自定义一个类继承Fileoutputformat;
    b.改写RecordWriter,具体改写输出数据的方法write().