MapReduce On Yarn 的理解


基本概念
YARN 的参数调优
YARN 的架构
MR on YARN 执行流程
基本概念
      作业、job、application、应用 是同一个意思
       container:容器,yarn 的组件,是一个虚拟的概念,将一定的内存和 CPU,比如 1G 内存,一个 vcore 抽象为一块地方,来运行任务
YARN 的参数调优
       一台 64G,16Cores 的服务器,系统安装完一般会使用一定的内存,假设还剩余 62G 内存,一般预留 15% ~ 20% 的空间,还剩余近 50G 的内存空间可供使用,预留的 12G 分配给 NN 4G,NM 1G,真正的预留空间还剩 7G
        内存方面的参数
         yarn.nodemanager.resource.memory-mb:计算总内存,默认-1,即分配8G
         yarn.scheduler.minimum-allocation-mb:每个 container 的最小大小,默认 1G
          yarn.scheduler.maximum-allocation-mb:在计算过程中可能 container 需要的内存比分配的最小的container内存要大,这个参数指定的是可以自动扩展到最大的内存大小,默认 8G
         CPU方面的参数(vcore:虚拟core)
         yarn.nodemanager.resource.cpu-vcores:表示该节点上YARN可以使用的vcore个数,默认是8,建议在生产上调整为实际物理core个数的两倍,一个 16Cores 的机器,该值就设置为 32
         yarn.scheduler.minimum-allocation-vcores:单个任务可以使用的最小 vc 个数,默认为 1
         yarn.scheduler.maximum-allocation-vcores:单个任务可以使用的最大 vc 个数,默认为 4,vc个数无法自动扩展
假定给定 64 G,16 Core 的机器,如何调整上面的参数达到资源最大化利用?
首先按照经验,可供使用的内存空间为 80% ~ 85%,这里使用 80% 计算,得到 51.2 G,大约50 G
然后是最大 vc 数,根据经验值最大设置为 4
最小的内存需要根据业务情况,这里给定 2G
通过最小内存可以计算出,50G 的内存最多可以分配 50 / 2 = 25 个 container,由于 vc 数最多只有 32 个,所以这里的最小 vc 数只能给 1,同时可以确定 vc 总数为 25 个
如果考虑最大 vc 数,25 个 vc 最多能分配 6 个 container,由于总的可分配内存是50G,所以最大内存为 50 / 6 = 8G
通过估算后以下几个参数如下

        yarn.nodemanager.resource.memory-mb:51200
         yarn.nodemanager.resource.cpu-vcores:25
         yarn.scheduler.minimum-allocation-mb:2048
         yarn.scheduler.minimum-allocation-vcores:1
        yarn.scheduler.maximum-allocation-mb:8192
        yarn.scheduler.maximum-allocation-vcores:4

YARN 的架构
ResourceManager:主节点,主要负责接收用户提交的任务请求,进行资源分配
NodeManager:从节点,主要负责接收和执行ApplicationMaster分配的任务
ApplicationMaster:每提交一个任务给ResourceManager,ResourceManager就会在从节点上启动一个AppMaster,负责任务的分配和资源的申请,将任务执行情况汇报给ResourceManager等
Container:资源分配的单位,ApplicationMaster申请到的资源都分配给一个个的container,然后再一个个的container中运行一个个maptask或者reducetask
JobHistory:历史完成任务的界面查看


MR on YARN 执行流程
        用户向yarn提交job,其中包含application master程序,启动application master的命令等
       RM 为该 job 分配第一个 container,与对应的 NM 通信,要求它在这个 container 启动作业的ApplicationMaster
       ApplicationMaster向 applications manager 注册,这样用户就可以通过 RM Web 查看 job 的状态
      ApplicationMaster 采用轮询的方式通过 RPC 协议向 resource scheduler 申请和领取资源一旦 ApplicationMaster 申请到资源后,与对应的 NM 通信,要求启动task
     NM 为任务设置好运行环境后,将任务的启动命令写到一个脚本中,并通过该脚本启动、运行任务
     各个任务 task 通过rpc协议汇报自己的状态和进度,以便让ApplicationMaster随时掌握各个任务的运行状态,从而在任务失败时,重启启动任务。
     job 运行完成后,ApplicationMaster 向 applications manager 注销并关闭自己


————————————————
原文链接:https://blog.csdn.net/gszhihan/article/details/95754523

posted @ 2021-04-16 21:51  胡洋  阅读(81)  评论(0编辑  收藏  举报