【若泽大数据实战第十三天】MapReduce 详解
前言:
上几次的课程围绕着 HDFS详细说了如何读和写的流程,本次课程主要讲MapReduce,我将梳理整套课程的,总结
MapReduce:
前言:
在工作中mapreduce不怎么用,但是面试的需求,必须要学。
重要:面试题:mapreduce 1.x有进程的叫
JobTracker :做资源作业的调度,监控平台
TaskTrachker:做作业计算 运行 map task reduce task
hadoop1.x MR1代(计算资源作业调度)
hadoop2.x MR2代(计算) 抽象成一个平台叫yarn平台,专门做资源调度的
MapReduce 2代是不需要部署组件的
MapReduce 架构设计、Yarn架构设计、Yarn的工作流程、MapReduce job 提交到 Yarn的工作流程 (面试题为同一题):
Yarn:
ResourceManager:
Application Manager: 应用程序管理器
Scheduler:调度器
NodeManager:
Container(容器):Yarn的一个资源的抽象 (ps查询不到的,也不再子进程,但是在代码里封装的设置多少个CPU,内存等)
MR Appliction Maser:
只有一个,运行在NodeManager上
MapReduce:
继承与XXX的
【若泽大数据面试】
请问容器是什么?
自己理解:如果对容器不是很理解的话就理解为是CPU和memory,生产调优就调优容器
答:容器是一个抽象的概念,封装了cpu和memory,运行了Map Task和Reduce Task任务。
Yarn的NodeManager将机器的cpu,内存,网络,磁盘,等等的资源的情况,把它封装成一个水缸,里面能放很多东西,是一个独立的模块,只运行自己的东西,容器里存放(CPU memory)
NodeManager将封装成一个水缸,这个水缸只能跑 MapTask(映射任务)或者跑ReduceTask(归约任务),一定要封装好了,不封装的话,资源就会随意调用。
总结:
MapReduce理解为是一个jar包或一个程序,这个程序要运行在Yarn上面,上面有两个进程,ResourceManager和NodeManager,ResourceManager里面两个模块是什么,Application Manager: 应用程序管理器 和 Scheduler:调度器,NodeManager相当于执行一个容器,这个容器里面有 CPU+Memory,这个容器运行一个封装的任务,MapTask(映射任务)或者跑ReduceTask(归约任务)
MapReduce1架构设计
主要有四个组成部分
- Client: 客户端
-
JobTracker: 负责资源监控和作业调度 (面试)
- JobTracker监控所有TaskTracker与job的健康状况,一旦发现失败,就将相应的任务转移到其他节点
- JobTracker会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器,而调度器会在资源出现空闲时,选择合适的任务使用这些资源
- 在Hadoop中,任务调度器是一个可插拔的模块,用户可以根据自己的需要设计相应的调度器
-
TaskTracker是jobTracker与Task之间的桥梁(面试)
- TaskTracker会周期性的通过Heartbeat将本节点上资源的使用情况和任务的运行进度汇报给JobTracker
- 接收JobTracker发送过来的命令并执行相应的操作
- TaskTracker使用”slot”等量划分本节点上的资源量
-
Task: 分为Map Task和Reduce Task,均由TaskTracker启动
- Map Task: 映射任务
- Reduce Task: 归约任务
MapReduce2架构设计
- 相同叫法
- MapReduce提交到Yarn的工作流程
- Yarn的工作流程
- Yarn的架构设计
Client向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序,KILL等
ResourceManger为该应用程序分配第一个Container,并与对应的Node-Manger通信,要求它在这个Container中启动应用程序的ApplicationMaster
ApplicationMaster首先向ResourceManger注册,这样用户可以直接通过ResourceManger查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7
ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源
一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务
NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务
各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态
应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己
Client向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序,KILL等,Application Manager会去找一台比较空闲的NodeManager机器
总结:
两个阶段:
1.启动Application Master (1、2、3)
2.Application Master 申请资源,运行task,监控task,直到任务运行完成(4、5、6、7、8)
当一个用户提交一个Jar包,到你的RM中的AM,当AM获得Jar包信息后,和其中的一台NM进行通信,就要起一个容器,这个容器运行的是MR的AM,当AM启动之后向RM中的AM进行注册,注册后我们才能通过URL界面:8088,查看作业资源的情况,然后AppMaster向RS去申请资源,资源申请后以后向NodeManager进行通信,告诉它运行多少个容器,运行什么样的任务,NodeManager为任务设置好运行环境,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务,Reduce Task启动之后,会实时和MR App Master汇报自己的状态和任务进度,成功失败等等,当所有的Tas运行完了,ApplicationMaster向ResourceManager注销并关闭自己。
上次课的补充:
学会看hadoop的日志:
首先找到日志的目录,
往下看有好多好多的日志,是不是纠结要看哪一个?
请记住找log日志要找.log结尾的,以下红色字体对应每个单词的位置信息。
hadoop-hadoop-datanode-hadoop-01.log 是在hadoop这台机器上启动datanode进程的日志输出,由log4j实现。
组件 用户 角色 机器名称
hadoop-hadoop-datanode-hadoop-01.out.1 hadoop这台机上datanode时将日志默认达到200M的时候拆分成多少个日志文件,数字 out.数字越大越陈旧
清空datanode,查看datanode启动的过程。
cat /dev/null > hadoop-hadoop-datanode-hadoop-01.log
生产日志刷的块,要sz下来到windows机器是哪个再进行日志文件查看
sz hadoop-hadoop-datanode-hadoop-01.log (找error和warning报错信息)
如何查看datanode日志路径
大数据课程推荐: