【Hadoop】【JHS】1-JHS的初始化过程及其服务介绍
【摘要】 【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)