【Hadoop】【JHS】1-JHS的初始化过程及其服务介绍

举报
沙漠里的果果酱 发表于 2023/08/09 17:23:01 2023/08/09
【摘要】 【Hadoop】【JHS】1-JHS的初始化过程及其服务介绍

JobHistoryServer是一个独立的进程,所以首先看下它的main方法。
JobHistoryServer.main()

public static void main(String[] args) {
  LOG.info("The JobHistoryServer will to start");
  launchJobHistoryServer(args);
  LOG.info("The JobHistoryServer has started");
}

JobHistoryServer.launcherJobHistoryServer()

static JobHistoryServer launchJobHistoryServer(String[] args) {
  //设置未捕获异常的处理器
  Thread.setDefaultUncaughtExceptionHandler(new YarnUncaughtExceptionHandler());
  //打印启停日志
  StringUtils.startupShutdownMessage(JobHistoryServer.class, args, LOG);
  JobHistoryServer jobHistoryServer = null;
  try {
    jobHistoryServer = new JobHistoryServer();
    ShutdownHookManager.get().addShutdownHook(
        new CompositeServiceShutdownHook(jobHistoryServer),
        SHUTDOWN_HOOK_PRIORITY);
    YarnConfiguration conf = new YarnConfiguration(new JobConf());
    //解析命令行侧参数,将参数写入conf中
    new GenericOptionsParser(conf, args);
    jobHistoryServer.init(conf);
    jobHistoryServer.start();
    HSAuditLogger.logSuccess(getUserName(), "jhsStartup", "JobHistoryServer");
  } catch (Throwable t) {
    LOG.error("Error starting JobHistoryServer", t);
    HSAuditLogger.logFailure(getUserName(), "jhsStartup", "",
        "JobHistoryServer", "Exception during startup");
    ExitUtil.terminate(-1, "Error starting JobHistoryServer");
  }
  return jobHistoryServer;
}

上述的启动流程主要做了下面几件事情:
1-添加shudown hook;
2-解析客户端参数;
3-init,start
serviceStart()方法中沒有做任何额外的操作,仅仅是将添加的service全部启动。下面主要介绍下serviceInit()的过程。代码如下:

protected void serviceInit(Configuration conf) throws Exception {
  Configuration config = new YarnConfiguration(conf);

  //初始化MRWebAppUtil的http policy(HTTPS或者HTTP)
  MRWebAppUtil.initialize(getConfig());
  try {
    //安全模式下需要使用mapred principal的keytab登录,mapreduce.jobhistory.keytab配置了keytab路径;
    doSecureLogin(conf);
  } catch(IOException ie) {
    throw new YarnRuntimeException("History Server Failed to login", ie);
  }
  //1-JobHistory类用来加载和管理 Job history 缓存.
  jobHistoryService = new JobHistory();
  historyContext = (HistoryContext)jobHistoryService;
  //2-是否打开historyserver 在启动时存储和恢复服务器状态功能,可存储用来生成token的master key以及生成的DT
  stateStore = createStateStore(conf);
  //3-创建jhs中token的master key管理器
  this.jhsDTSecretManager = createJHSSecretManager(conf, stateStore);
  //4-创建jhs 客户端服务,该服务用来处理客户端JobClient请求。例如,常用的getCounters(),getJobReport()。后面会详细介绍;
  clientService = createHistoryClientService();
  //5-创建归集日志删除服务,周期性的删除已经过期聚合日志信息(Application粒度);将/tmp/logs/下面存活周期超过:log-aggregation.retain-seconds的文件删掉的归集日志删掉
  aggLogDelService = new AggregatedLogDeletionService();
  //6-创建日志归档服务,周期性归档日志信息(Application粒度);将nodemanager上传到/tmp/logs下面的日志归档到/tmp/archived下面,注意日志归档和日志归集的不同
  aggLogArchiveService = new AggregatedLogArchiveService();
  //7-
  hsAdminServer = new HSAdminServer(aggLogDelService, aggLogArchiveService,jobHistoryService);
  addService(stateStore);
  addService(new HistoryServerSecretManagerService());
  addService(jobHistoryService);
  addService(clientService);
  addService(aggLogDelService);
  addService(aggLogArchiveService);
  addService(hsAdminServer);

  DefaultMetricsSystem.initialize("JobHistoryServer");
  JvmMetrics jm = JvmMetrics.initSingleton("JobHistoryServer", null);
  pauseMonitor = new JvmPauseMonitor();
  addService(pauseMonitor);
  jm.setPauseMonitor(pauseMonitor);

  super.serviceInit(config);
}

上面的init代码中主要做了创建了七种不同的service,JobHistoryServer的所有功能都在这里面实现。
关于这五个service各自的功能将在其他的章节中详细介绍。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。