Fork me on GitHub

MapReduce 概述

1. MapReduce 定义

  • MapReduce 是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。
  • MapReduce 核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。

2. MapReduce 优缺点

  • 优点:
    • 易于编程;
    • 良好的扩展性;
    • 高容错性;
    • 适合PB级以上海量数据的离线处理;
      缺点:
    • 不擅长实时计算;
    • 不擅长流式计算;
    • 不擅长DAG(有向图)计算;

3. MapReduce 核心思想

  • MapReduce 运算程序一般需要分成两个阶段:Map阶段和Reduce阶段;


===================

3.1 MapReduce 进程

  • 一个完整的MapReduce程序在分布式运行时,有三类实例进程:
    • MrAppMaster: 负责整个程序的过程调度及状态协调;
    • MapTask: 负责Map阶段的整个数据处理流程;
    • ReduceTask: 负责Reduce阶段的整个数据处理流程;

4. MapReduce 编程规范

  • 用户编写的程序分成三个部分:Mapper,Reducer 和 Driver;

  • Mapper 阶段:

    • 用户自定义的 Mapper 要继承自己的父类;
    • Mapper 的输入数据是KV对的形式(KV的类型可自定义);
    • Mapper 中的业务逻辑写在map()方法中;
    • Mapper 的输出数据是KV对的形式(KV的类型可自定义);
    • map()方法(MapTask进程)对每一个<K,V>调用一次;
  • Reducer 阶段:

    • 用户自定义的Reducer要继承自己的父类;
    • Reducer 的输入数据类型对应 Mapper 的输出类型,也是KV;
    • Reducer 的业务逻辑写在 reduce() 方法中;
    • ReduceTask 进程对每一组相同K的<K,V>组调用一次 reduce() 方法;
  • Driver 阶段

    • 相当于YARN集群的客户端,用于提交我们整个程序到YARN集群,提交的是封装了MapReduce程序相关运行参数的job对象;
posted @ 2019-05-29 21:13  小a的软件思考  阅读(918)  评论(0编辑  收藏  举报