文档章节

Hadoop之MapReduce的基本概念

飞鱼说编程
 飞鱼说编程
发布于 01/16 15:14
字数 1396
阅读 55
收藏 3

1. MapReduce 的概念

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

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

2. 为什么要 MapReduce

(1) 海量数据在单机上处理因为硬件资源限制,无法胜任;
(2) 而一旦将单机版程序扩展到集群来分布式运行,将极大增加程序的复杂度和开发难度;
(3) 引入 MapReduce 框架后,开发人员可以将绝大部分工作集中在业务逻辑的开发上,而将分布式计算中的复杂性交由框架来处理。
(4) mapreduce分布式方案考虑的问题
      A、运算逻辑要不要先分后合? 
      B、程序如何分配运算任务(切片)?
      C、两阶段的程序如何启动?如何协调?
      D、整个程序运行过程中的监控?容错?重试?
分布式方案需要考虑很多问题,但是我们可以将分布式程序中的公共功能封装成框架,让开发人员将精力集中于业务逻辑上。而 MapReduce 就是这样一个分布式程序的通用框架。

3. MapReduce 的核心思想

上图简单的阐明了 map 和 reduce 的两个过程或者作用,虽然不够严谨,但是足以提供一个大概的认知,map 过程是一个蔬菜到制成食物前的准备工作,reduce 将准备好的材料合并进而制作出食物的过程。

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

4. MapReduce 进程

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

5. MapReduce 编程规范

用户编写的程序分成三个部分:Mapper,Reducer,Driver (提交运行 MR 程序的客户端)
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 阶段
整个程序需要一个 Drvier 来进行提交,提交的是一个描述了各种必要信息的 job 对象

6. MapReduce 程序运行流程

(1) 在 MapReduce 程序读取文件的输入目录上存放相应的文件;
(2) 客户端程序在 submit() 方法执行前,获取待处理的数据信息,然后根据集群中参数的配置形成一个任务分配规划;
(3) 客户端提交 job.split、jar 包、job.xml 等文件给 yarn,yarn 中的 resourcemanager 启动 MRAppMaster;
(4) MRAppMaster 启动后根据本次 job 的描述信息,计算出需要的 maptask 实例数量,然后向集群申请机器启动相应数量的 maptask 进程;
(5) maptask 利用客户指定的 inputformat 来读取数据,形成输入 KV 对;
(6) maptask 将输入 KV 对传递给客户定义的 map() 方法,做逻辑运算;
(7) map() 运算完毕后将 KV 对收集到 maptask 缓存;
(8) maptask 缓存中的 KV 对按照 K 分区排序后不断写到磁盘文件;
(9) MRAppMaster 监控到所有 maptask 进程任务完成之后,会根据客户指定的参数启动相应数量的 reducetask 进程,并告知 reducetask 进程要处理的数据分区;
(10) Reducetask 进程启动之后,根据 MRAppMaster 告知的待处理数据所在位置,从若干台 maptask 运行所在机器上获取到若干个 maptask 输出结果文件,并在本地进行重新归并排序,然后按照相同 key 的 KV 为一个组,调用客户定义的 reduce() 方法进行逻辑运算;
(11) Reducetask 运算完毕后,调用客户指定的 outputformat 将结果数据输出到外部存储。
 

本文为原创文章,如果对你有一点点的帮助,别忘了点赞哦!比心!如需转载,请注明出处,谢谢!

 

© 著作权归作者所有

飞鱼说编程

飞鱼说编程

粉丝 195
博文 366
码字总数 685323
作品 0
深圳
程序员
私信 提问
大数据经典学习路线(及供参考)之 一

1.Linux基础和分布式集群技术 学完此阶段可掌握的核心能力: 熟练使用Linux,熟练安装Linux上的软件,了解熟悉负载均衡、高可靠等集群相关概念,搭建互联网高并发、高可靠的服务架构; 学完此...

柯西带你学编程
2018/05/22
0
0
Hive系列(一)Hive基本概念

一、Hive基本概念 1.1 什么是Hive Hive:由Facebook开源用于解决海量结构化日志的数据统计。 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能...

u012834750
2018/05/29
0
0
Hadoop2.X的安装与配置(二)本地模式

在上一篇文章中,我们介绍了Hadoop2.X安装与配置前的准备阶段。 在本地模式配置前,首先完成准备阶段。 点击如下链接,进入准备阶段的配置 https://blog.csdn.net/weixin38187469/article/d...

weixin_38187469
2018/04/16
0
0
如何分布式运行mapreduce程序

如何分布式运行mapreduce程序 一、 首先要知道此前提 若在windows的Eclipse工程中直接启动mapreduc程序,需要先把hadoop集群的配置目录下的xml都拷贝到src目录下,让程序自动读取集群的地址后...

Zero零_度
2015/09/06
245
0
阿里云 E-MapReduce产品优势及使用场景

E-MapReduce 是构建于阿里云 ECS 弹性虚拟机之上,利用开源大数据生态系统,包括 Hadoop、Spark、HBase,为用户提供集群、作业、数据等管理的一站式大数据处理分析服务。 产品优势: 与自建集...

凹凹凸曼
2018/09/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

yapi上传接口idea插件

YapiIdeaUploadPlugin 插件使用 目的 减少手动维护yapi接口文档的时间成本,通过idea插件快速提交接口文档到yapi; 保证接口文档的准确性,方便后台、前端、测试等查看接口文档; 反向规范代...

狂奔的熊二
8分钟前
5
0
最近学习到的Lambda表达式

前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 中秋去了躺上海,在外滩上打了个卡: 紧接着学了一下Java的函数式编程,给大家整理了...

Java3y
18分钟前
11
0
一条insert语句批量插入多条记录

-- 一条insert只能插入一条数据 insert into person (id, personCode, personName , telNumber)values(1,'5112403' , '张三' , '1378902134'); 一次插入多条数据的方法: 方式一: insert i......

葬-花
30分钟前
2
0
IT兄弟连 HTML5教程 HTML5的基本语法 简单HTML实例制作

现在学习HTML5的方式 目前HTML还处于HTML4与HTML5之间的过渡使用阶段。移动端的Web界面开发已经全面使用HTML5的技术,而在PC端由于用户升级浏览器周期较长,面临着页面的兼容性问题,以及开发...

老码农的一亩三分地
45分钟前
4
0
[Android] 【每日更新书源】「阅读」APP -100+ 精品书源一键导入!每天自动更新最新书源!

我特地写了个爬虫爬取书源,每天自动更新书源(URL是固定的)!大家也可以定期导入一下! 放心!导入时会自动去除重复书源的! 前段时间我发过一个书源大礼包的帖子,不过现在已经无法编辑修...

xiaogg
48分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部