Hadoop(07) MapReduce原理

YARN基本流程

这里写图片描述

  1. Job submission(作业提交)
    Client通过RPC从ResourceManager中获取一个Application ID 检查作业输出配置,计算输入分片 拷贝作业资源(job jar、配置文件、分片信息)到HDFS,以便后面任务的执行

  2. Job initialization(作业初始化)
    ResourceManager将作业递交给Scheduler(有很多调度算法,一般是根据优先级)Scheduler为作业分配一个Container,ResourceManager就加载一个application master process并交给NodeManager管理ApplicationMaster主要是创建一系列的监控进程来跟踪作业的进度,同时获取输入分片,为每一个分片创建一个Map task和相应的reduce task Application Master还决定如何运行作业,如果作业很小(可配置),则直接在同一个JVM下运行

  3. Task assignment(任务分配)
    ApplicationMaster向Resource Manager申请资源(一个个的Container,指定任务分配的资源要求)一般是根据data locality来分配资源

  4. Task execution(任务执行)
    ApplicationMaster根据ResourceManager的分配情况,在对应的NodeManager中启动Container 从HDFS读取任务所需资源(job jar,配置文件等),然后执行该任务

  5. Progress and status update(进度、状态更新)
    定时将任务的进度和状态报告给ApplicationMaster Client定时向ApplicationMaster获取整个任务的进度和状态

  6. Job completion(作业完成)
    Client定时检查整个作业是否完成 作业完成后,会清空临时文件、目录等

MR 工作原理

这里写图片描述

  1. 当我们执行hadoop jar wordcount.jar com.myhadoop.mr.WordCount /words /wcout0917这条命令时,会启动一个Job任务,该任务会被交给JobClient处理。

  2. JobClient会通过RPC协议得到了ResourceManager的一个代理对象,然后开始与ResourceManager进行通信,JobClient会把JobID交给ResourceManager,ResourceManager会返回给JobClient一个地址的前缀,JobClient会把这个地址前缀拼接上JobID做为文件要存放的路径(拼接JobID的目的是为了防止地址重复)。

  3. Client会使用FileSystem把数据写到HDFS系统上的这个拼接好的地址。

  4. JobClient再把刚才数据存放的路径和JobID等描述信息传给ResourceManager,ResourceManager会把这些描述信息记录下来。

  5. ResourceManager把接收的信息进行初始化并且把它们放到自己的任务调度器当中。

  6. ResourceManager要看这个数据有多大,根据数据的大小来决定起多少个Mapper和多少个Reducer

  7. NodeManager与ResourceManager通过心跳机制进行通信,NodeManager会向ResourceManager申请任务。

  8. NodeManager申请到任务之后,便会到HDFS系统下载相应的jar包。

  9. NodeManager下载完jar包之后,它会另外起一个java进程(yarnchild)来处理,在这个进程中有Mapper和Reducer

  10. Reducer把数据都处理完之后,再把结果重新再写到HDFS系统上。


MR原理

      如下图所示:一个file文件可能被物理切分成block1、block2…blockN块,一个块又被切分成了多个切片(切片个数可配),每个切片对应着一个MapperTask,每个Mapper把处理后的结果(Map)传给shuffle处理,shuffle处理完之后再交给Reducer进行处理,Reducer处理完之后把处理结果写到结果文件当中,每个Reducer对应一个结果文件。
Mapreduce原理图


  • MR (1.0版本) 执行流程

    (1)、客户端提交一个mr的jar包给JobClient(提交方式:hadoop jar …)
    (2)、JobClient通过RPC和JobTracker(RM)进行通信,返回一个存放jar包的地址(HDFS)和jobId
    (3)、client将jar包写入到HDFS当中(path = hdfs上的地址 + jobId)
    (4)、开始提交任务(任务的描述信息,不是jar, 包括jobid,jar存放的位置,配置信息等等)
    (5)、JobTracker进行初始化任务
    (6)、读取HDFS上的要处理的文件,开始计算输入分片,每一个分片对应一个MapperTask
    (7)、TaskTracker通过心跳机制领取任务(任务的描述信息)
    (8)、下载所需的jar,配置文件等
    (9)、TaskTracker启动一个java child子进程,用来执行具体的任务(MapperTask或ReducerTask)
    (10)、将结果写入到HDFS当中

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值