10-MapReduce的架构(1.X和2.X的特性)以及Hadoop的yarn环境的搭建

6.3.2 MapReduce2.X

image-20220621161633769

  1. yarn的加入

    • 2.X开始使用Yarn(Yet Another Resource Negotiator)另一种资源协调者,来统一管理资源,
    • 以后其他的计算框架可以直接访问yarn来获取当前集群的空闲节点
  2. client

    • 客户端发送任务到集群
      • 如RM、spark、flink等
  3. ResourceManager组件

    • 定义:
      • 资源协调框架的管理者,负责整个集群的资源管理和分配
    • 分类:
      • 分为主节点和备用节点(防止单点故障)
        • 主备节点的切换基于Zookeeper进行管理
    • 作用:
      • 监控ApplicationMaster的运行情况和NodeManager的资源情况
        • 时刻与NodeManager保持心跳,接受NodeManager汇报当前节点的资源情况
      • 当有外部框架要使用资源的时候,直接访问ResourceManager即可
        • 比如说有MR任务时,先去ResourceManager申请资源,ResourceManager根据汇报相对灵活分配资源
      • 资源在NodeManager1时,NodeManager1要负责开辟资源
  4. NodeManager组件

    • 资源协调框架的执行者

      • 负责集群中每个节点的资源以及使用,运行任务
    • 每一个DataNode上默认有一个NodeManager

    • NodeManager汇报自己的信息到ResourceManager

      image-20220621162813521
  5. Container

    • 2.X资源单位
      • 包括CPU,内存等
    • Container中的资源是动态分配的
  6. Application

    • 我们提交给yarn需要运行的应用程序
      • 如RM,spark,flink等
  7. ApplicationMaster组件

    • 定义:

      • 本次JOB任务的主导者
    • 作用:

      • 对集群中的某个应用程序进行管理
      • 向RM申请资源
      • 负责调度本次被分配的资源Container并监控任务
    • 当所有的节点任务全部完成,application告诉ResourceManager请求杀死当前ApplicationMaster的线程

    • 本次任务所有的资源都会被释放

  8. RPC

    • Remote Procedure Call ,yarn中各个组件间的通信采用的RPC机制
  9. Task(MapTask–ReduceTask)

    • 为了完成application,需要完成多个任务,按照MR的流程执行业

      • 分为Map task和Reduce task
    • 当任务完成时,ApplicationMaster接收到当前节点的回馈

      image-20220621165035450

  • 注意:
    • RM主要对资源进行管理以及分配,不负责task,但是会监控AM的运行情况,如果AM运行失败的话,会重新分配Container,然后重启AM
    • NM负责该节点容器的资源使用情况,不监控task
    • AM主要申请资源,然后分配任务给相应的NM,同时监控task的运行情况,如果任务失败,那么会重新申请资源,在新的container中运行task
    • 我们提供的jar包来运行MapReduce时,其中的应用作业的配置文件,jar包等都是通过HDFS分配到各个节点的

6.3.3 MapRedujarce 2.X 的工作流程☕️

从整体层面上看,有五个独立的实体:

  • 客户端,提交 MapReduce 作业。
  • YARN 资源管理器(YARN resource manager),负责协调集群上计算机资源的分配。
  • YARN 节点管理器(YARN node manager),负责启动和监视集群中机器上的计算容器(container)。
  • MapReduce的 application master,负责协调MapReduce 作业的任务。MRAppMaster 和 MapReduce 任务运行在容器中,该容器由资源管理器进行调度(schedule)[此处理解为划分、分配更为合适] 且由节点管理器进行管理。
  • 分布式文件系统(通常是 HDFS),用来在其他实体间共享作业文件。

工作流程具体内容

自我理解步骤:

  1. 首先客户端向HDFS发来一个请求,这个请求经过yarn之后被分配给RM(ResourceManager)这个资源协调框架的管理者,然后由RM来向下面的NM(NodeManager)来完成相应的请求
  2. 接受请求之后,RM会创建一个ApplicationMaster进程来给告诉他要完成哪些请求
  3. 然后ApplicationMaster会检查NodeManager下面的资源情况,查看谁有空闲的Container,接着给这些Container的NodeManager资源协调框架的执行者发出一个指令,告诉他们去给他们下面的Container去执行实际的请求
  4. 当Container完成了NodeManager发来的请求时,MR会杀死ApplicationMaster这个进程,然后资源被释放,请求完成

书籍借鉴步骤:

在yarn框架中执行一个MapReduce程序时,从提交到完成需要经历如下8个步骤

  1. 用户编写客户端应用程序,向yarn提交应用程序,提交的内容包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。

  2. yarn中的ResourceManager负责接收和处理来自客户端的请求,然后ResourceManager里面的调度器会为应用程序分配一个容器Container。同时。ResourceManager的应用程序管理器会与该容器所在的NodeManager通信,为该应用程序在该容器中启动一个ApplicationMaster

  3. ApplicationMaster被RM创建后,首先会向ResourceManager注册,从而使得用户可以通过ResourceManager来直接查看应用程序的运行状态,接下来的4-7步骤是具体的应用程序的执行过程

  4. ApplicationMaster采用轮询的方式用过RPC协议向ResourceManager申请资源

  5. ResourceManager以“容器”的形式向提出申请的ApplicationMaster分配资源,一旦ApplicationMaster申请到资源,就会与该容器所在的NodeManager进行通信,要求他启动任务。

  6. 当ApplicationMaster要求启动任务时,他会为任务设置好运行环境(包括环境变量,jar包等),然后将任务启动命令写到一个脚本中,最后通过在容器中运行该脚本来启动任务

  7. 各个任务通过某个RPC协议向ApplicationMaster汇报自己的进度和状态,让ApplicationMaster可以随时掌握各个任务的运行状态,从而可以在任务失败时重启任务

  8. 应用程序完成后,ApplicationMaster向ResourceManager的应用程序管理器注销并关闭自己,若ApplicationMaster因故障失败,ResourceManager中的应用程序管理器会检测到失败的情形,然后将其重新启动,直到所有的任务执行完毕。

    img

书籍网上资料参考:

[YARN体系结构工作流程介绍【大数据文章】 (itcast.cn)](

🔖 Day10-MapReduce详解

重点掌握

1、MR2.x中的Yarn架构与作用
2、MR的HelloWorld程序的实现与执行

理解

1、第一个MapReduce的Job实现
2、Map和Reduce泛型参数
3、WordCount实现与Jar包执行
4、源码分析之前置讲解
5、源码分析之Split切片相关
6、源码分析之Map数据读取相关
7、源码分析之KvBuffer-Partitioner-Sort-Spill-Merge

6.4 Hadoop搭建yarn环境

NameNode01NameNode02DateNodeZKFCZooKeeperJournalNodeResourceManagerNodeManager
Node01
Node02
Node03

*yarn环境搭建需要基于前面的HA环境

6.4.1切换工作目录

  • [root@node01 ~]# cd /opt/yjx/hadoop-3.1.2/etc/hadoop/

6.4.2修改集群环境

  • [root@node01 hadoop]# vim hadoop-env.sh

    oot@node01 hadoop]# vim hadoop-env.sh
    5.3. 修改配置文件
    [root@node01 hadoop]# vim mapred-site.xml
    ##继续添加用户信息
    export JAVA_HOME=/usr/java/jdk1.8.0_231-amd64
    export HDFS_NAMENODE_USER=root
    export HDFS_DATANODE_USER=root
    export HDFS_ZKFC_USER=root
    export HDFS_JOURNALNODE_USER=root
    export YARN_RESOURCEMANAGER_USER=root
    export YARN_NODEMANAGER_USER=root
    

6.4.3 修改配置环境

  1. [root@node01 hadoop]# vim mapred-site.xml

    <!-- 指定mr框架为yarn方式 -->
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    <!-- 指定mapreduce jobhistory地址 -->
    <property>
    <name>mapreduce.jobhistory.address</name>
    <value>node01:10020</value>
    </property>
    <!-- 任务历史服务器的web地址 -->
    <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>node01:19888</value>
    </property>
    <!-- 配置运行过的日志存放在hdfs上的存放路径 -->
    <property>
    <name>mapreduce.jobhistory.done-dir</name>
    <value>/history/done</value>
    </property>
    <!-- 配置正在运行中的日志在hdfs上的存放路径 -->
    <property>
    <name>mapreudce.jobhistory.intermediate.done-dir</name>
    <value>/history/done/done_intermediate</value>
    </property>
    <property>
    <name>mapreduce.application.classpath</name>
    <value>
    /opt/yjx/hadoop-3.1.2/etc/hadoop,
    /opt/yjx/hadoop-3.1.2/share/hadoop/common/*,
    /opt/yjx/hadoop-3.1.2/share/hadoop/common/lib/*,
    /opt/yjx/hadoop-3.1.2/share/hadoop/hdfs/*,
    /opt/yjx/hadoop-3.1.2/share/hadoop/hdfs/lib/*,
    /opt/yjx/hadoop-3.1.2/share/hadoop/mapreduce/*,
    /opt/yjx/hadoop-3.1.2/share/hadoop/mapreduce/lib/*,
    /opt/yjx/hadoop-3.1.2/share/hadoop/yarn/*,
    /opt/yjx/hadoop-3.1.2/share/hadoop/yarn/lib/*
    </value>
    </property>
    
  2. [root@node01 hadoop]# vim yarn-site.xml

    <!-- 开启RM高可用 -->
    <property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
    </property>
    <!-- 指定RM的cluster id -->
    <property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>yarn-yjx</value>
    </property>
    <!-- 指定RM的名字 -->
    <property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
    </property>
    <!-- 分别指定RM的地址 -->
    <property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>node01</value>
    </property>
    <property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>node03</value>
    </property>
    <property>
    <name>yarn.resourcemanager.webapp.address.rm1</name>
    <value>node01:8088</value>
    </property>
    <property>
    <name>yarn.resourcemanager.webapp.address.rm2</name>
    <value>node03:8088</value>
    </property>
    <!-- 指定zk集群地址 -->
    <property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>node01:2181,node02:2181,node03:2181</value>
    </property>
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>
    <!-- 开启日志聚合 -->
    <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
    </property>
    <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>86400</value>
    </property>
    <!-- 启用自动恢复 -->
    <property>
    <name>yarn.resourcemanager.recovery.enabled</name>
    <value>true</value>
    </property>
    <!-- 制定resourcemanager的状态信息存储在zookeeper集群上 -->
    <property>
    <name>yarn.resourcemanager.store.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>
    <!-- Whether virtual memory limits will be enforced for containers. -->
    <property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
    </property>
    <property>
    <name>yarn.nodemanager.vmem-pmem-ratio</name>
    <value>3</value>
    </property>
    

6.4.4 拷贝到其他节点

[root@node01 hadoop]# scp yarn-site.xml mapred-site.xml root@node02:`pwd`
[root@node01 hadoop]# scp yarn-site.xml mapred-site.xml root@node03:`pwd`

6.4.5 开启集群

  • [123]zkServer.sh start
  • [root@node01 hadoop]# start-dfs.sh
  • [root@node01 hadoop]# start-yarn.sh
  • [root@node01 hadoop]# mr-jobhistory-daemon.sh start historyserver

6.4.6 关闭服务并关机拍摄快照

  • [1]stop-all.sh
  • [1]mr-jobhistory-daemon.sh stop historyserver
  • [123]zkServer.sh stop
  • [123]shutdown -h now
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值