大数据学习之八——MapReduce工作机制

1.MapReduce的特点

软件框架、并行处理、可靠且容错、大规模集群、海量数据集

2.mapper和reducer

mapper负责“分”:把复杂的任务分解为若干个“简单的任务”来处理。简单的任务包含三层含义:

(1)数据或计算的规模相对原任务要大大缩小;

(2)就近计算原则,任务会分配到存放着所需数据的节点上进行计算;

(3)这些小任务可以并行计算,彼此间几乎没有依赖关系。

reducer负责对map阶段的结果进行汇总。

3.MapReduce的工作机制

(1)实体间的交互

如图所示,包含四个独立的实体

·客户端:编写mapreduce程序,配置作业,提交作业,这就是程序员完成的工作;

·jobtracker:初始化作业,分配作业,与TaskTracker通信,协调整个作业的执行。jbotracker是一个java应用程序,它的主类是JobTracker

·tasktracker:保持与JobTracker的通信,在分配的数据片段上执行Map或Reduce任务,TaskTracker和JobTracker的不同有个很重要的方面,就是在执行任务时候TaskTracker可以有n多个,JobTracker则只会有一个。tasktracker是java应用程序,它的主类是TaskTracker

·HDFS文件式分布系统:保存作业的数据、配置信息等等,最后的结果也是保存在hdfs上面。用来在其他实体间共享作业文件

MapReduce的运行步骤:

A. 首先是客户端要编写好mapreduce程序,配置好mapreduce的作业也就是job, 接下来提交job到JobTracker上,这个时候JobTracker就会构建这个job,具体就是分配一个新的job任务的ID值

B. 接下来jobtracker检查就是输出目录是否存在,如果存在那么job就不能正常运行下去,JobTracker会抛出错误给客户端;检查输入目录是否存在,如果不存在同样抛出错误.。如果存在JobTracker会根据输入,计算输入分片(Input Split),并配置Job需要的资源。

C. 分配好资源后,JobTracker初始化作业job,初始化主要做的是将Job放入一个内部的队列,让配置好的作业调度器能调度到这个作业,作业调度器会初始化这个job,初始化就是创建一个正在运行的job对象(封装任务和记录信息),以便JobTracker跟踪job的状态和进程。

D. 初始化完毕后,作业调度器会获取输入分片信息(input split),每个分片创建一个map任务。

E. 接下来进行任务分配,tasktracker会运行一个简单的循环机制定期发送心跳给jobtracker,心跳间隔是5秒,程序员可以配置这个时间,心跳就是jobtracker和tasktracker沟通的桥梁,通过心跳,jobtracker可以监控tasktracker是否存活,也可以获取tasktracker处理的状态和问题,同时tasktracker也可以通过心跳里的返回值获取jobtracker给它的操作指令。

F. 执行任务。在任务执行时候jobtracker可以通过心跳机制监控tasktracker的状态和进度,同时也能计算出整个job的状态和进度,而tasktracker也可以本地监控自己的状态和进度。当jobtracker获得了最后一个完成指定任务的tasktracker操作成功的通知时候,jobtracker会把整个job状态置为成功,然后当客户端查询job运行状态时候,客户端会查到job完成的通知。

(2)

在Hadoop中,一个MapReduce作业会把输入的数据集切分为若干独立的数据块,由Map任务以完全并行的方式处理;框架会对Map的输出先进行排序,然后把结果输入给Reduce任务;作业的输入和输出都会被存储在文件系统中,整个框架负责任务的调度和监控,以及重新执行已经关闭的任务;MapReduce框架和分布式文件系统是运行在一组相同的节点,计算节点和存储节点都是在一起的。

MapReduce作业的处理流程简略图:

按照时间顺序包括:输入分片(input split)、map阶段、combiner阶段和reduce阶段。

输入分片(input split):在进行map计算之前,mapreduce会根据输入文件计算输入分片(input split),每个输入分片(input split)针对一个map任务。输入分片(input split)存储的并非数据本身,而是一个分片长度和一个记录数据的位置的数组,输入分片(input split)往往和hdfs的block(块)关系很密切;map阶段:程序员编写map函数,因此map函数效率相对好控制,而且一般map操作都是本地化操作也就是在数据存储节点上进行;Combiner阶段:是一个本地化的reduce操作,它是map运算的后续操作,主要是在map计算出中间文件前做一个简单的合并重复key值的操作;shuffle阶段:将map的输出作为reduce的输入的过程就是shuffle;reduce阶段:和map函数一样也是程序员编写的,最终结果是存储在hdfs上的。

原文地址:https://www.cnblogs.com/m-study/p/8367067.html

时间: 2024-10-07 04:59:39

大数据学习之八——MapReduce工作机制的相关文章

大数据学习之MapReduce基础与Yarn集群安装09

1大数据解决的问题? 海量数据的存储:hadoop->分布式文件系统HDFS 海量数据的计算:hadoop->分布式计算框架MapReduce 2什么是MapReduce? 分布式程序的编程框架,java->ssh ssm ,目的:简化开发! 是基于hadoop的数据分析应用的核心框架. mapreduce的功能:将用户编写的业务逻辑代码和自带默认组件整合成一个完整的 分布式运算程序,并发的运行在hadoop集群上. 3 MapReduce的优缺点 优点: (1)易于编程 (2)良好的拓

大数据学习笔记2--hdfs工作原理及源码分析

windows下配置hadoop hadoop 安装包解压,路径不要有特殊字符 lib和bin直接解压出来的不可用,需要自己重新编译 配置环境变量:HADOOP_HOME,path中添加:bin目录 namenode 整个文件系统的管理节点.它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表.接收用户的操作请求. 响应客户端的请求,上传文件: client申请上传文件,namenode查看元数据信息,查看客户端申请的路径是否已存在 namenode返回可用的datan

大数据学习之七——MapReduce简单代码实例

1.关于MapReduce MapReduce是一种可用于数据处理的编程模型,能够支持java.Python.C++等语言.MapReduce程序本质上是并行运行的,因此可以处理大规模数据集,这也是它的优势. 2.使用hadoop分析数据 hadoop提供了并行处理,我们将查询表示成MapReduce作业. MapReduce任务过程分为两个处理阶段:map阶段和reduce阶段.每个阶段都以键/值作为输入和输出,并选择它们的类型.程序员还需要定义两个函数:map函数和reduce函数. Jav

大数据学习之MapReduce编程案例一单词计数 10

一:单词计数 1:单词计数总流程图 2:代码实现 1:Map阶段 package it.dawn.YARNPra.wc_hdfs; import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapp

好程序员大数据学习路线分享MAPREDUCE

好程序员大数据学习路线分享MAPREDUCE,需求:统计大量的文本文件中的单词出现的次数 1)整个运算需要分阶段 阶段一:并行局部运算 阶段二 :汇总处理,不同的阶段需要开发不同的程序 2)阶段之间的调用 3)业务程序(task程序)如何并发到集群并启动程序 4)如何监控task程序的运行状态,如何处理异常 ::这些问题是开发分布式程序都会面临的问题,完全可以封装成框架::MR 的结构 一个完整的MapReduce运行时有三类实例进程: 1)MRAppMaster : 负责整个程序的过程调度和状

大数据学习路线分享MapReduce全过程解析

大数据学习路线分享MapReduce全过程解析,移动数据与移动计算 在学习大数据的时候接触了移动数据和移动计算这两种联系紧密而又有很大不同的概念,其中移动计算也叫做本地计算. 在以前的数据处理中时使用的移动数据,其实就是将需要处理的数据传输到存放不同处理数据方式逻辑的各个节点上.这样做的效率很低,特别是大数据中的数据量是很大的,至少都是GB以上,更大的是TB.PB甚至更大,而且磁盘I/O.网络I/O的效率是很低的,这样处理起来就需要很长的时间,远远不能满足我们的要求.而移动计算就出现了. 移动计

如何制定一份可实施的2018年大数据学习计划?

我们习惯了"间歇性踌躇满志.持续性混吃等死", 那么2018年快过了一半了,又该做点什么呢? 其实,要想做出改变并非难事,你缺少的只是一个计划(去做).学习大数据分析更是如此,因为大数据是一门综合性的学科,复杂且具有一定系统性,所以大数据的学习更加需要有一个明确的目标和计划,然后按部就班的执行. 那么如何才能制定出一份可行性强的大数据学习计划呢? 我们可以从以下几个方面去制定. 一.目标 首先你需要制定一个明确的你想要实现的长远的目标.比如,半年内学习相关课程,初步掌握大数据基础知识:

制定一份可实施的2018年大数据学习计划?

如何制定一份可实施的2018年大数据学习计划? 我们习惯了"间歇性踌躇满志.持续性混吃等死", 那么又该做点什么呢? 其实,要想做出改变并非难事,你缺少的只是一个计划(去做).学习大数据分析更是如此,因为大数据是一门综合性的学科,复杂且具有一定系统性,所以大数据的学习更加需要有一个明确的目标和计划,然后按部就班的执行. 那么如何才能制定出一份可行性强的大数据学习计划呢? 我们可以从以下几个方面去制定. 大数据学习交流群:716581014 如何制定一份可实施的2018年大数据学习计划?

想学习大数据?这才是完整的大数据学习体系

大数据 干货走起,闲话不多说,以下就是小编整理的大数据学习思路 第一阶段:linux系统 本阶段为大数据学习入门基础课程,帮大家进入大数据领取打好Linux基础,以便更好的学习Hadoop.habse.NoSQL.saprk.storm等众多技术要点. 另:目前企业中无疑例外是使用Linux来搭建或部署项目的 第二阶段:大型网站高并发处理 本阶段的学习是为了让大家能够了解大数据的源头,数据从而而来,继而更好的了解大数据.通过学习处理大型网站高并发问题反向的更加深入的学习Linux,同事站在了更高