分布式调度系统01-yarn

来源:互联网 发布:windows exp导出数据库 编辑:程序博客网 时间:2024/06/06 10:47

hadoop2.0开始使用yarn作为调度器。

ResourceManager:
启动阶段:
  1. 分支一:提供了备份状态format功能,删除RM已保存的某种RMStateStore状态,使用观察者模式将RMStateStare引起的状态变化通知到局部和全局观察者(目前观察者很少),在这一过程中有类对象级锁保证RMStateStore处理的正确性
  2. 分支二:创建ResourceManager实例,使用 ShutdownHookManager类(调用JVM的registering shutdown hooks)加入shutdown的hook处理( 完成JVM Shutdown hook for CompositeService which will stop the give CompositeService gracefully in case of JVM shutdow. Here CompositeService is ResourceManager),启动ResourceManager服务;
  3. ResourceManager核心启动过程:
    • 初始化内部状态信息;
    • 初始化service(serviceInit()):Yarn中大部分service都继承自AbstractService或CompositeService(CompositeService也继承自AbstractService,主要是向上层调用做了次分层封装),主要方法是init(),start(),stop()提供了调用框架,框架包含service自己状态的检查和通知观察者状态的改变,具体处理逻辑由继承类实现;初始化使用init()函数完成需要service的初始化,包括:加载core-site.xml读取资源、用户、用户组、优先级等信息,加载yarn-site.xml读取资源等信息;登陆处理;包括RMActiveServices、AsyncDispatcher、AdminService、 RMApplicationHistoryWriter、 SystemMetricsPublisher在ResourceManager中的角色设定和初始化;创建 rm的dispatcher(AsyncDispatcher类:使用BlockingQueue及loop扫描队列实现异步调用)完成事件分发,事件注册后面在RMActiveServices类的serviceInit()中会提到,事件触发大多在之后调度器工作中,比如FairScheduler调用addApplication()时进行
    • 启动service(serviceStart()):根据HA配置确实是启动为备用态还是活动态;活动态会由RMActiveServices启动大量services;备用态会由RMActiveServices关闭大量services,然后再做一次初始化,但不启动services;
  4. 至此,ResourceManager的启动主流程介绍完了,下面会对启动的services做些介绍,后面大量内容都是深入主要的service内部剖析;

0 0
原创粉丝点击