文档章节

【hadoop】16.MapReduce-简介

Areya
 Areya
发布于 01/12 17:27
字数 1463
阅读 24
收藏 1

简介

本章节我们先来了解一些关于MapReduce的理论知识。从本章节您可以学习到:MapReduce的相关知识。

1、概念

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

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

注意几个关键词即可:分布式、业务逻辑以及自带默认组件。

1.1、为什么选择MapReduce

海量数据在单机上处理因为硬件资源限制,无法胜任而一旦将单机版程序扩展到集群来分布式运行,将极大增加程序的复杂度和开发难度。引入mapreduce框架后,开发人员可以将绝大部分工作集中在业务逻辑的开发上,而将分布式计算中的复杂性交由框架来处理。

1.2 mapreduce分布式方案考虑的问题

mapreduce作为一个分布式解决方案,使用时至少需要考虑以下问题:

  • 运算逻辑要不要先分后合?
  • 程序如何分配运算任务(切片)?
  • 两阶段的程序如何启动?如何协调?
  • 整个程序运行过程中的监控?容错?重试?

分布式方案需要考虑很多问题,但是我们可以将分布式程序中的公共功能封装成框架,让开发人员将精力集中于业务逻辑上。

而mapreduce就是这样一个分布式程序的通用框架。

1.3、MapReduce核心思想

mapreduce让我想起了java8新概念——流。

我们来看一下官方提供的统计单词的案例的MapReduce示意图,从中了解mapreduce的思想。

countworldphoto

分布式的运算程序往往需要分成至少2个阶段

  • 第一个阶段的maptask并发实例,完全并行运行,互不相干
  • 第二个阶段的reduce task并发实例互不相干,但是他们的数据依赖于上一个阶段的所有maptask并发实例的输出。

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

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

  • MrAppMaster:负责整个程序的过程调度及状态协调
  • MapTask:负责map阶段的整个数据处理流程
  • ReduceTask:负责reduce阶段的整个数据处理流程

同时留意我们示意图中提出的几个问题,一旦我们知道了答案,就差不多学会了MapReduce的使用了,接下来就是探索这些问题的答案的过程。

1.4、MapReduce编程规范

用户编写的MapReduce程序分成三个部分:Mapper,Reducer,Driver(提交运行MapReduce程序的客户端)。

  1. Mapper阶段
    • 用户自定义的Mapper要继承自己的父类
    • Mapper的输入数据是KV对的形式(KV的类型可自定义)
    • Mapper中的业务逻辑写在map()方法中
    • Mapper的输出数据是KV对的形式(KV的类型可自定义)
    • map()方法(maptask进程)对每一个<K,V>调用一次
  2. Reducer阶段
    • 用户自定义的Reducer要继承自己的父类
    • Reducer的输入数据类型对应Mapper的输出数据类型,也是KV
    • Reducer的业务逻辑写在reduce()方法中
    • Reducetask进程对每一组相同k的<k,v>组调用一次reduce()方法
  3. Driver阶段 整个程序需要一个Drvier来进行提交,提交的是一个描述了各种必要信息的job对象。

在学习1.5节之前,推荐进入下一节编写一个简单案例:【hadoop】17.MapReduce-wordcount案例简单实现

1.5、MapReduce运行流程分析

以wordCount案例为基础,大致运行流程如下:

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将结果数据输出到外部存储。

© 著作权归作者所有

Areya
粉丝 28
博文 97
码字总数 167412
作品 0
广州
私信 提问
hadoop的简介与伪分布的搭建

一:大数据hadoop简介 二:hadoop的伪分布安装 三:运行wordcount测试 四:hadoop 常用端口号 五:hadoop的四大模块包含 六:启动脚本: 一: 大数据hadoop简介 二:hadoop的伪分布安装 2.1 ...

flyfish225
2018/04/10
0
0
centos单机部署hadoop伪集群

目录 1 简介 2 版本 3 创建hadoop用户 4 设置SSH无密码登陆localhost 5 下载hadoop 6 设置环境变量 7 配置hadoop 8 测试hadoop 9 一些注意 简介 Hadoop能在单台机器上以伪分布式模式运行,即...

lwaif
2015/06/24
214
0
windows 环境下Eclipse开发MapReduce环境设置

1、Hadoop开发环境简介 1.1 Hadoop集群简介 Java版本:jdk-6u31-linux-i586.bin Linux系统:CentOS6.0 Hadoop版本:hadoop-1.0.0.tar.gz 1.2 Windows开发简介 Java版本:jdk-6u31-windows-i5......

加油_张
2013/11/30
13.6K
0
2016 | 大数据平台类产品资讯汇总

InfoSphere Streams 平台支持流数据的实时处理,支持不断更新持续查询的结果,可在移动的数据流中检测洞察。 InfoSphere Streams——实时大数据分析平台 Streams V4.2新特性:支持使用 Pyth...

勿忘初心321
2016/11/25
23
0
8月Oracle与CUUG再度联手呈现免费hadoop技术沙龙,有人去过吗、

  在酷夏的最后一天,CUUG为你再添一把火,携手Oracle举办国内首次Hadoop的技术沙龙,机会难得,火速报名。   本次Oracle技术沙龙将讲授:Hadoop的历史、Hadoop的框架结构、Hadoop的安装...

eddy0lion
2013/08/23
238
1

没有更多内容

加载失败,请刷新页面

加载更多

《JAVA核心知识》学习笔记 (19. 数据库)

19.1.1. 存储引擎 19.1.1.1. 概念 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、 更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧...

Shingfi
22分钟前
3
0
三分钟手操自己的yum源

本文章原创首发公众号:编程三分钟 上次就想手操yum源了,考虑到有的朋友没接触过,直接写成了yum源的科普,活活憋了我一个星期,现在我们快快开始。 什么情况下我们需要搭建一个仓库呢? 记...

编程三分钟
26分钟前
4
0
一起来学Java8(二)——Lambda表达式

Lambda简介 什么是Lambda表达式,简单的说是一种匿名函数表达方式。因此Lambda表达式本质是个函数,只不过没有函数名称。 Lambda表达式具有以下特点: 匿名,它没有函数名称 本质是个函数,除...

猿敲月下码
28分钟前
4
0
排序算法之希尔排序

1、介绍。 希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D...

daxiongdi
36分钟前
3
0
log4j2入门hello world

1.什么是log4j2 (1)log4j log4j是apache的一个开源项目,表示log for java.是一个日志工具,可以将日志信息输出到文件,控制台等其他地方 ,还可以定义日志的输出格式,另外还有日志级别的区分,可...

Blueeeeeee
38分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部