`
huangyongxing310
  • 浏览: 490597 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Hadoop MapReduce框架详解

阅读更多
Hadoop MapReduce框架详解


1.我们要学习的就是这个计算模型的运行规则。在运行一个mapreduce计算任务时候,任务过程被分为两个阶段:map阶段和reduce阶段,每个阶段都是用键值对(key/value)作为输入(input)和输出(output)。而程序员要做的就是定义好这两个阶段的函数:map函数和reduce函数。
2.HDFS,即Hadoop Distributed File System,它是Hadoop的存储基础,是数据层面的,提供海量的数据存储;而MapReduce,则是一种引擎或者编程模型,可以理解为数据的上一层,我们可以通过编写MapReduce程序,对海量的数据进行计算处理。这就类似于我们通过 检索(MapReduce)所有文件(HDFS),找到我们想要的结果。
3.Mapreduce是一种编程模型,是一种编程方法,抽象理论。
4.mapreduce程序,我们的实现一个map函数和reduce函数。
5.Hadoop是一个开源的框架,可编写和运行分布式应用处理大规模数据,是专为离线和大规模数据分析而设计的,
6.分布式计算, 分布式计算的核心就在于 利用分布式算法 把运行在单台机器上的程序扩展到多台机器上并行运行.从而使数据处理能力成倍增加.但是这种分布式计算一般对编程人员要求很高,而且对服务器也有要求.导致了成本变得非常高.
7.Haddop 就是为了解决这个问题诞生的.Haddop 可以很轻易的把 很多linux的廉价pc 组成 分布式结点,然后编程人员也不需要知道分布式算法之类,只需要根据mapreduce的规则定义好接口方法,剩下的就交给Haddop. 它会自动把相关的计算分布到各个结点上去,然后得出结果.
8.例如上述的例子 : Hadoop 要做的事 首先把 1PB的数据文件导入到 HDFS中, 然后编程人员定义好 map和reduce, 也就是把文件的行定义为key,每行的内容定义为value , 然后进行正则匹配,匹配成功则把结果 通过reduce聚合起来返回.Hadoop 就会把这个程序分布到N 个结点去并行的操作.那么原本可能需要计算好几天,在有了足够多的结点之后就可以把时间缩小到几小时之内.


核心组成部分:
1.客户端,就是编写mapreduce程序,配置作业,提交作业
2.JobTracker(Hadoop服务器上的一个管理),分配jobID,进行输入数据的分片,初始化job,分配作业,与TaskTracker通信,协调整个作业的执行;任务个数的确定和任务状态的管理等。
3.TaskTracker,一直和JobTracker保持心跳和通信,在分配的数据片段上执行Map、Reduce任务。TaskTracker是一个运行Map、Reduce任务的容器并与JobTracker保持通信和上报状态。
4.map任务,不断读取输入数据,并调用map接口的任务,是TaskTracker运行的一个任务。
5.Reduce任务,不断读取输入数据,并调用reduce接口的任务,是TaskTracker运行的一个任务。
6.JobTracker相当于一个job管理服务器,TaskTracker相当于一堆的可以运行的任务的服务器(具有JVM运行环境),map、Reduce任务相当于运行在TaskTracker上的进程或线程。
7.JobTracker会跟据job的情况和TaskTracker的运行情况向TaskTracker分配map、Reduce任务,TaskTracker运行完成后返回运行状态给JobTracker。
8.JobTracker接收到一个Job最后一个任务成功完成返回后,就返回这个Job的完成状态给客户端。


启动过程:
1.客户端要编写好mapreduce程序,配置好mapreduce的作业也就是job,接下来就是提交job了,提交job是提交到JobTracker上,
2.时候JobTracker就会构建这个job,具体就是分配一个新的job任务的ID值,接下来它会做检查操作,
(1)确定输出目录是否存在,如果存在那么job就不能正常运行下去,JobTracker会抛出错误给客户端,
(2)接下来还要检查输入目录是否存在,如果不存在同样抛出错误,如果存在JobTracker会根据输入计算输入分片(Input Split),如果分片计算不出来也会抛出错误,
3.这些都做好了JobTracker就会配置Job需要的资源了。分配好资源后,JobTracker就会初始化作业,初始化主要做的是将Job放入一个内部的队列,让配置好的作业调度器能调度到这个作业,然后进行调度,默认的调度方法是FIFO调试方式。
4.作业调度器会初始化这个job,初始化就是创建一个正在运行的job对象(封装任务和记录信息),以便JobTracker跟踪job的状态和进程。
5.初始化完毕后,作业调度器会获取输入分片信息(input split),每个分片创建一个map任务。
6.接下来就是任务分配了,这个时候tasktracker会运行一个简单的循环机制定期发送心跳给jobtracker,心跳间隔是5秒,程序员可以配置这个时间,心跳就是jobtracker和tasktracker沟通的桥梁,通过心跳,jobtracker可以监控tasktracker是否存活,也可以获取tasktracker处理的状态和问题,同时tasktracker也可以通过心跳里的返回值获取jobtracker给它的操作指令。
7.任务分配好后就是执行任务了。在任务执行时候jobtracker可以通过心跳机制监控tasktracker的状态和进度,同时也能计算出整个job的状态和进度,而tasktracker也可以本地监控自己的状态和进度。
8.当jobtracker获得了最后一个完成指定任务的tasktracker操作成功的通知时候,jobtracker会把整个job状态置为成功,然后当客户端查询job运行状态时候(注意:这个是异步操作),客户端会查到job完成的通知的。


mapreduce工作过程
HDFS(文件)-->输入分片(input split)-->map任务-->map接口-->环形内存缓冲区-->Combiner(可选,进行输出相同的合并)-->排序-->HDFS(进行hash分区,输出map任务数量个溢出文件)-->合并这些溢出文件-->按reduce个数进行分区输出到新的文件(HDFS)-->reduce任务-->reduce接口-->结果调用输出API输出到结果的文件中(存储在hdfs上的)


mapreduce运行机制,这些按照时间顺序包括:输入分片(input split)、map阶段、combiner阶段、shuffle阶段和reduce阶段。
1. 输入分片(input split):
(1)在进行map计算之前,mapreduce会根据输入文件计算输入分片(input split),每个输入分片(input split)针对一个map任务,输入分片(input split)存储的并非数据本身,而是一个分片长度和一个记录数据的位置的数组,输入分片(input split)往往和hdfs的block(块)关系很密切,假如我们设定hdfs的块的大小是64mb,将按分区大小进行分片。
(2)就是对输入的文件(文件集)按分区大小进行分割成多个分区,有多少个分区就会启多个少个map任务
(3)map任务按行对数据进行分割生成<key,value>对(其中偏移量(即key值),value为这一行的内容),并调用用户定义的map方法进行处理,生成新的<key,value>对。

2. map阶段:
就是程序员编写好的map函数了,所做的操作就是读出map任务传出来的(Text value),并跟据(Text value)生成你用于统计用的<key,value>对,之后调用输出接口输出新的<key,value>对

3. combiner阶段:
(1)combiner阶段是程序员可以选择的,combiner其实也是一种reduce操作,主要是在map计算出中间文件前(map任务输出)做一个简单的合并重复key值的操作。
(2)combiner在进行排序(按key排序)前完成,变成<key,value,value,...>对,排序是在输出文件前完成的。

4. shuffle阶段:
(1).将map的输出作为reduce的输入的过程就是shuffle了,这个是mapreduce优化的重点地方。
(2).一般mapreduce计算的都是海量数据,map输出时候不可能把所有文件都放到内存操作,因此map写入磁盘的过程十分的复杂,更何况map输出时候要对结果进行排序,内存开销是很大的,map在做输出时候会在内存里开启一个环形内存缓冲区,这个缓冲区专门用来输出的,默认大小是100mb,并且在配置文件里为这个缓冲区设定了一个阀值,默认是0.80,同时map还会为输出操作启动一个守护线程,如果缓冲区的内存达到了阀值的80%时候,这个守护线程就会把内容写到磁盘上,这个过程叫spill,另外的20%内存可以继续写入要写进磁盘的数据,写入磁盘和写入内存操作是互不干扰的,如果缓存区被撑满了,那么map就会阻塞写入内存的操作,让写入磁盘操作完成后再继续执行写入内存操作,前面我讲到写入磁盘前会有个排序操作,这个是在写入磁盘操作时候进行,不是在写入内存时候进行的,如果我们定义了combiner函数,那么排序前还会执行combiner操作。
(3).这个阶段就是完成<key,value,value,...>对的工作和进行排序,最后输出到新的文件中(这些文件叫溢出文件(80M左右一个))。
(4).当map输出全部做完后,map会合并这些输出文件。这个过程里还会有一个Partitioner操作(分区),Partitioner操作会跟据reduce个数进行分区(按key使用hash进行分区),使每个reduce处理一个分区的数据。
(5)

5. reduce阶段:
和map函数一样也是程序员编写的,最终结果是存储在hdfs上的。



参考(Hadoop MapReduce框架详解):http://blog.jobbole.com/84089/
参考(MapReduce工作原理):http://www.cnblogs.com/ywl925/p/3981360.html
参考(WordCount运行详解):http://blog.csdn.net/net19880504/article/details/17303375
参考(通过inputSplit分片size控制map数目):http://www.cnblogs.com/yaohaitao/p/5610546.html
参考(MapReduce Input Split(输入分/切片)详解):http://blog.csdn.net/dr_guo/article/details/51150278
参考(MapReduce启动过程):http://www.aboutyun.com/thread-6723-1-1.html
参考(MapReduce启动过程):http://blog.csdn.net/chlaws/article/details/23709571
分享到:
评论

相关推荐

    006_hadoop中MapReduce详解_3

    在Hadoop生态系统中,MapReduce是一种分布式计算框架,主要用于处理和生成大数据集。"006_hadoop中MapReduce详解_3"可能是指一个系列教程的第三部分,着重讲解MapReduce的核心概念、工作原理以及实际应用。在这个...

    Hadoop MapReduce v2 Cookbook, 2nd Edition-Packt Publishing(2015) 高清完整版PDF下载

    #### 三、MapReduce 工作原理详解 **MapReduce** 是一种编程模型,用于处理大规模数据集的分布式计算。其核心思想是将数据处理任务分解成两个阶段:Map阶段和Reduce阶段。 - **Map 阶段**:输入数据被分割成多个...

    Hadoop_MapReduce教程

    ### Hadoop MapReduce 教程知识点详解 #### 一、Hadoop MapReduce 概述 Hadoop MapReduce 是一个强大的分布式计算框架,主要用于处理大规模数据集。它通过将任务分解成多个子任务来实现并行处理,从而极大地提高了...

    005_hadoop中MapReduce详解_2

    在Hadoop生态系统中,MapReduce是一种分布式计算框架,它允许我们处理海量数据并行化,非常适合大规模数据集的处理。本文将深入解析MapReduce的工作原理、核心组件以及如何编写一个基本的MapReduce程序。 MapReduce...

    Hadoop新MapReduce框架Yarn详解

    使用和学习过老Hadoop框架(0.20.0及之前版本)的同仁应该很熟悉如下的原MapReduce框架图:图1.Hadoop原MapReduce架构从上图中可以清楚的看出原MapReduce程序的流程及设计思路:可以看得出原来的map-reduce架构是...

    Hadoop mapreduce. 基于ItemCF的协同过滤 物品推荐系统.zip

    在这个项目中,我们探讨了如何利用Hadoop MapReduce框架来构建一个基于Item-Based Collaborative Filtering(ItemCF)的物品推荐系统。这是一种广泛应用于个性化推荐的技术,特别是在电子商务、流媒体服务等领域。...

    大数据Hadoop核心之MapReduce详解

    大数据Hadoop核心之MapReduce详解 MapReduce是Hadoop核心模块之一,作为一个分布式运算程序的编程框架,用于用户开发基于Hadoop的数据分析应用。MapReduce的核心功能是将用户编写的业务逻辑代码和自带默认组件整合...

    Hadoop新框架Yarn详解.pdf

    【Hadoop YARN框架详解】 YARN,全称为Yet Another Resource Negotiator,是Apache Hadoop项目自0.23.0版本引入的新一代资源管理框架,旨在解决原Hadoop MapReduce框架的诸多问题,提高可扩展性、资源利用率和整体...

    Hadoop新框架Yarn详解.docx

    YARN(Yet Another Resource Negotiator),是Apache Hadoop 2.x版本引入的新一代计算框架,旨在解决原版Hadoop MapReduce存在的问题,特别是资源管理和调度的效率以及系统的可扩展性。YARN的核心理念是将JobTracker...

    在Windows上安装Hadoop HDFS和MapReduce框架1

    ### 在Windows上安装Hadoop HDFS和MapReduce框架 #### 一、安装步骤详解 **1. 下载Hadoop** - 访问官方网站 [http://archive.apache.org/dist/hadoop/core/](http://archive.apache.org/dist/hadoop/core/),下载...

    Hadoop MapReduce 入门

    ### Hadoop MapReduce 入门知识点详解 #### 一、MapReduce 概述 ##### 1.1 MapReduce 的起源与发展 - **起源**: MapReduce 是由 Google 提出的一种分布式计算模型,最初是为了应对互联网搜索引擎处理大规模数据集...

    Hadoop MapReduce多输出详细介绍

    在使用MapReduce框架时,经常需要处理输出数据,这时可能会遇到需要将输出分散到多个文件中的需求,这就是Hadoop MapReduce多输出功能的用途。Hadoop MapReduce多输出的功能主要由MultipleOutputFormat类及其相关类...

    Hadoop技术详解.Hadoop Operation

    Hadoop是大数据处理领域的重要工具,它以其分布式计算框架闻名,允许企业在大规模数据集上进行高效、可靠的处理。 在Hadoop的核心组件中,主要包括HDFS(Hadoop Distributed File System)和MapReduce。HDFS是一种...

    Hadoop数据处理框架MapReduce原理及开发

    Hadoop及其MapReduce框架为大规模数据处理提供了强大的支持。通过HDFS,可以高效地存储和访问大规模数据;而MapReduce则提供了一个简单但功能强大的编程模型,使得开发者能够轻松地编写出高性能的大规模数据处理应用...

    Hadoop从入门到上手企业开发

    近百节课视频详细讲解,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 课程目录 000 上课方式和课程大纲介绍 001 Linux系统基本知识说明和启动Linux虚拟机 ...066 Hadoop MapReduce框架数据类型讲解 067

Global site tag (gtag.js) - Google Analytics