• 如何在yarn上运行Hello World(一)


    1.YARN是什么
    YARN  (Yet Another Resource Negotiator,另一种资源协调者) 是hadoop上的一种资源调度器,它是一个通用资源管理系统,可以为上层应用提供统一的资源管理和调度.
     
    2.yarn的结构
     
    YARN的结构是一个典型的主从结构(MASTER/SLAVER)
    其中的ResourceManager(简称为RM),是一个全局的资源调度器,负责整个系统的资源管理和分配.
    然后NodeManager(简称为NM),则是每个节点上的资源和任务管理器,他有两个作用,首先NM会定时的向RM汇报该节点的资源使用情况和每个Container的运行状态,然后NM还会接收并处理来自AM的要求停止和启动指定container等各种请求.
     
     
    3.如何编写基于yarn的程序
    编写一个运行于yarn上的应用程序,主要需要编写两个组件,YARNClient和ApplicationMaster(简称AM).
     
    1. YARNClient 运行在用户端,为用户和YARN集群上的应用交互提供了一系列的接口.主要作用包括创建应用(Application),申请用于运行AM的Container并提交AM到这个Container进行运行.如果有必要的话,还以通过该YARNClient获取 AM 在 YARN集群的运行状态.
    2.AM是一个独立的进程,是每个用户应用的主进程,作用是协调运行在YARN集群中的应用程序的执行状况,主要包括 和RM协商资源,并且配合NM一起工作来启动并跟踪Container的运行情况,并根据运行情况对用户程序作出对应的调整.
     
    假如我们要在YARN集群上运行一个简单的java程序(输出一句 hello world),那么程序结构一般如下图所示.
     
     
    如上图所示, 其中:
    1. AM.jar 表示 应用的 Application Master 的jar包
    2.HelloWorld.jar 表示包含输出的 HelloWorld 的类的jar包,这个jar包里面实际上是一个HelloWorld类,核心内容就是一个主函数,运行后输出一句Hello World
    3.在应用提交运行前,我们事先将 AM.jar 和 HelloWorld.jar 上传到 HDFS 存储,用来方便之后来使用.
    4.YARNClient 提供了用户和YARN集群进行交互的接口,实际上 YARNClient 并不能算作YARN集群中一个独立的模块,只是提供个类 YarnClient,用户可以在自己的应用中调用 YarnClient 类来和YARN集群进行交互.
    5.Container(AM) 表示YARN集群上用来运行 AM的进程(作为YARN集群中的一个抽象概念-container)
    6.Container(HelloWorld) 表示YARN集群上真正运行的用户程序(我们用HelloWorld来表示一个普通的用户程序)的进程,其中Container(HelloWorld) 和 Container(AM) 可能在同一个NM进程下,也可能分配给不同的NM,这主要决定于RM的分配策略.
     
     
    用户提交一个基于yarn的应用程序,也就是YarnClient 运行流程如下:
     
    1.用户事先要将使用的 AM.jar 和 HelloWorld.jar 打包上传到hdfs
    2.用户在客户端实例化 YarnConfiguration对象
    3. 初始化并运行YarnClient
    4.为了新的应用程序 得到一个 YarnClientApplication 对象
    5.获取提交应用的上下文对象,并且可以使用这个上下文对象设置AM的一些运行情况
    6.获取 新应用在YARN集群的唯一标识
    7.设置应用的名字,这个名字会在yarn的web页面体现出来
    8.设置该应用对应的AM的jar为 LocalResource,以供 AM Container启动时获取.需要注意的是为了方便读取 am.jar 一般会存储在hdfs上
    其中:
    设置资源类型为file,这样这个文件会在不会被解压的情况下直接复制到 container的对应目录
    设置资源的可见性为LocalResourceVisibility.APPLICATION,表示只有这个应用可以访问该资源,当应用运行停止后这个资源会被NM自动删除
    9.将启动container需要的资源描述设置到对应的 container上下文中,以备后面使用
    10 设置启动AM需要的环境变量,其中我们只配置了classPath,具体使用中可以根据实际情况设置其他的环境变量,例如JAVA_HOME,PATH等
    11 设置启动AM的命令,我们这里就是设置了 用java命令启动 AM.jar的 包含主函数的类,并传入相关参数进行启动
    12.设置 启动应用 的一些必要信息
    13. 向YARN集群提交运行应用,提交的过程会阻塞,直到RM返回改应用的状态为ACCEPTED或者失败.
    14,该步骤为可选项,即可以堵塞client端程序,直到应用运行结束或者异常退出等情况发生
    到此为止,我们就初步完成了一个最简单的提交yarn应用程序的client示例代码
    后面则是YARN集群接收到启动AM的请求后,为其分配 AM Container ,然后启动AM进程并运行.
    我们会在后面的文章详细描述如何编写一个应用的AM程序,敬请期待.
     

  • 相关阅读:
    Jquery复习DAY1(jQuery 选择器 jQuery 样式操作 jQuery 效果)
    git知识
    简单分析vue计算属性和methods方法的区别
    vue生命周期
    elementUI的级联选择器Cascader 高度不匹配问题高度溢出错误
    .Net Core3.1 常用的服务注入
    判断是否为AJAX请求
    JWT权限验证
    CodeSmith介绍
    常见ORM介绍
  • 原文地址:https://www.cnblogs.com/ucarinc/p/7815738.html
Copyright © 2020-2023  润新知