MapReduce简单入门基础了解

版权声明:有一种生活不去经历不知其中艰辛,有一种艰辛不去体会,不会知道其中快乐,有一种快乐,没有拥有不知其中纯粹 https://blog.csdn.net/wwwzydcom/article/details/83796871

MapReduce定义

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

优点

  1. 易于编程 :简单实现一些接口完成一个分布式程序,这个程序分布大量廉价的PC机器上,和一个单线程程序一样
  2. 扩展性好:计算资源不足时,增加机器即可
  3. 高容错性:一台机器挂了,计算任务转移到另外一个节点上运行,不至于任务运行失败,整个过程是hadoop内部完成,不要人工参与
  4. 适合PB级别的数据离线处理:不适合在线处理

缺点

  1. 实时计算 :无法像mysql一样毫秒级别返回结果
  2. 流式运算:流失计算的输入数据是动态的,但是MapReduce输入数据集是静态的,
    设计特点决定是静态的
  3. DAG(有向图)计算:当多个程序有依赖关系,后一个程序的输入为前一个程序的输出,MR程序不是不能做,每个MR程序输出结果写入磁盘,会造成大量磁盘IO,导致性能低下

MapReduce核心思想:
在这里插入图片描述

  1. 分布式的运算程序一般需要至少两个阶段
  2. 第一阶段:maptask并发实例:完全并行运行,互不相干
  3. 第二阶段:reduce task并发实例,互不相干,但是他们的数据依赖于上一个阶段的所有maptask并发实例的输出
  4. MapReduce编程模型只能包含一个map阶段和一个reduce阶段,用户业务逻辑复杂,只能多个MapReduce程序,串行运行

MapReduce进程

一个完整的MapReduce程序在分布式时三类实例进程
(1) MrAppMaster:负责整个程序的过程调度以及状态协调
(2) MapTask:负责map阶段的整个数据处理流程
(3)ReduceTask:负责reduce阶段的整个数据处理流程

MapReduce编程规范

(1) Mapper阶段

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

(2)Reducer阶段

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

(3)Driver阶段(提交运行mr程序的客户端)

	整个程序需要一个Drvier来进行提交,提交是描述了各种必要信息的job对象

猜你喜欢

转载自blog.csdn.net/wwwzydcom/article/details/83796871