Chinaunix首页 | 论坛 | 博客
  • 博客访问: 100285
  • 博文数量: 41
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 0
  • 用 户 组: 普通用户
  • 注册时间: 2018-05-23 12:43
文章分类

全部博文(41)

文章存档

2016年(2)

2015年(3)

2014年(16)

2013年(20)

分类: HADOOP

2014-09-03 15:41:21

MapReduce学习笔记  

2014-01-12 21:34:08|  分类: Hadoop |  标签:mapreduce原理分析  |举报|字号 订阅

MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题.
MapReduce由两个阶段组成:Map和Reduce,用户只需要实现map()和reduce()两个函数,即可实现分布式计算。这两个函数的形参是key、value对,表示函数的输入信息。
MR执行流程
MapReduce学习笔记 - frank_gwf - frank_gwf的博客
JobTracker 相当于项目经理负责接收用户请求和具体分配和监督taskTracker的执行情况,TaskTracker相当于开发人员专门用于执行!
上图中就解释为:客户端上传到JobTracker上,JobTracker接收客户端的作业请求,JobTracker就把MapReduce写在代码中的Map任务和Reduce任务分配给不同的TasekTracker执行。TaskTracker从集群的角度讲就是一台一台的物理的机器!
MR计算的数据来源是HDFS走向也是HDFS,我们写的MR程序 实际是打成一个jar包来执行,jar包首先提交给JobTracker,JobTracker把jar包中的Java代码解析成一个Job来运行,Job是包括很多个任务在运行的,job就会被分解为MapTask和ReduceTask,他们都是运行在TadkTracker之上的,MapperTask和ReduceTask都可以跑多个,MapperTask的数据是来源于HDFS经过覆盖的map函数之后传给ReduceTask,ReduceTask在经过覆盖的reduce函数之后写入到HDFS中
MapperTask和Reducer都可以跑多个
MapReduce学习笔记 - frank_gwf - frank_gwf的博客
HDFS存储的层面与MR计算的层面他们对数据的划分是不一样的
一个切片对应一个mapper任务,从存储上讲是划分为block块的,从MR上讲是划分为输入切片的
在每一个存放block的机器上都会执行mapper任务
区分为很多个mapper任务是为了并行读取数据并且计算,计算模型并行执行,分布式计算的核心就是并行计算,特点就在于很多个机器同时计算,分布式计算有可以成为并行计算
reduce任务是接收mapper输出的,在reduce任务中有一个机会就是覆盖reduce函数来把在mapper任务中接收的数据汇总之后在输出在HDFS中,就得到最终结果,为了实现用户的可操作性,我们可以通过覆盖map函数和reduce函数来实现具体的业务操作来满足需求
mapper任务数量与reduce任务数量之间压根没有对应关系,mapper任务的数量有自己的需求来确定,reduce任务的数量也有自己的需求来确定,他俩是不相关的,没有直接关系
◆执行步骤:八个步骤,两个阶段
1. map任务处理
1.1 读取输入的HDFS文件内容,解析成key、value对。对输入文件的每一行,解析成key、value对。每一个键值对调用一次map函数。
1.2 实现自己的逻辑,对输入的key、value处理,转换成新的key、value输出。
1.3 对输出的key、value进行分区。
1.4 对不同分区的数据,按照key进行排序(按照key进行排序)、分组(按照key分组,把相同key的value放到一个集合中)。
1.5 (可选)分组后的数据进行归约(归约:简单的讲就是把大的数据集合变成小的数据集合,例如加减法
)。
2.reduce任务处理
2.1 对多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点。
2.2 覆盖reduce函数,实现自己的逻辑,对输入的key和values处理,转换成新的key,value输出。
2.3 把reduce的输出保存到HDFS中。
例子:对hello you
             hello me中单词出现的次数进行统计
MapReduce学习笔记 - frank_gwf - frank_gwf的博客
 
MapReduce学习笔记 - frank_gwf - frank_gwf的博客
 
 通过上边的学习我分析了下面两个对比图上边的是hdfs中增删改查操作要经过他们的老大namenode,下边的操作同样要经过他们的老大叫jobtracker。被框起来的部分都是一个RPC的通信,这里面namenode和jobtracker都担任服务端的角色dfsclient和jobclient都担任客户端的角色,客户端和服务端的通信要有一个代理对象就是clientprotocal和jobsubmission protorcol
jobtracker是一个服务端就意味着他里面有main 并且里面启动了jobtracker,有RPC.getserver()方法,从这个分析来看RPC就是我们hadoop运行的核心的架构
MapReduce学习笔记 - frank_gwf - frank_gwf的博客
阅读(918) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~