❣️这篇文章简单介绍一下资源调度工具YARN

YARN 产生背景

  • MapReduce1.x ==> MapReduce2.x

    • master/slave : JobTracker/TaskTracker
    • JobTracker:单点、压力大
    • 仅仅只能够支持 mapreduce 作业
  • 资源利用率

    • 所有的计算框架运行在一个集群中,共享一个集群的资源,按需分配!
master: resource management:ResourceManager (RM)
job scheduling/monitoring:per-application ApplicationMaster (AM)
slave: NodeManager (NM)

YARN 架构

  • Client、ResourceManager、NodeManager、ApplicationMaster
  • master/slave: RM/NM

Client: 向 RM 提交任务、杀死任务等

  • ApplicationMaster:

    • 每个应用程序对应一个 AM
    • AM 向 RM 申请资源用于在 NM 上启动对应的 Task
    • 数据切分
    • 为每个 task 向 RM 申请资源(container)
    • NodeManager 通信
    • 任务的监控
  • NodeManager: 多个

    • 干活
    • 向 RM 发送心跳信息、任务的执行情况
    • 接收来自 RM 的请求来启动任务
    • 处理来自 AM 的命令
  • ResourceManager:集群中同一时刻对外提供服务的只有 1 个,负责资源相关

    • 处理来自客户端的请求:提交、杀死
    • 启动/监控 AM
    • 监控 NM
    • 资源相关
  • container:任务的运行抽象

    • memory、cpu....
    • task 是运行在 container 里面的
    • 可以运行 am、也可以运行 map/reduce task

yarn 执行流程

yarn执行流程

提交自己开发的 MR 作业到 YARN 上运行的步骤:

  1. mvn clean package -DskipTests 打包 jar 包
    windows/Mac/Linux ==> Maven
  2. 把编译出来的 jar 包(项目根目录/target/...jar)以及测试数据上传到服务器
    scp xxxx hadoop@hostname:directory
  3. 把数据上传到 HDFS
    hadoop fs -put xxx hdfspath
  4. 执行作业
    hadoop jar xxx.jar 完整的类名(包名+类名) args.....
  5. 到 YARN UI(8088) 上去观察作业的运行情况
  6. 到输出目录去查看对应的输出结果