Yarn应用开发规则
使用YarnClient.createYarnClient()创建客户端
不建议直接使用protocol接口ClientRMProxy.createRMProxy(config,ApplicationClientProtocol.class)创建客户端。
Application master使用异步接口AMRMClientAsync.createAMRMClientAsync()与ResourceManager交互
不建议直接使用protocol接口ClientRMProxy.createRMProxy(config,ApplicationMasterProtocol.class) 创建application master与resource manager交互的客户端。
Application master使用异步接口AMRMClientAsync.createAMRMClientAsync()与NodeManager交互
不建议直接使用接口ContainerManagementProtocolProxy创建application master与node manager交互的客户端。
多线程安全登录方式
如果有多线程进行login的操作,当应用程序第一次登录成功后,所有线程再次登录时应该使用relogin的方式。
login的代码样例:
private Boolean login(Configuration conf){ boolean flag = false; UserGroupInformation.setConfiguration(conf); try { UserGroupInformation.loginUserFromKeytab(conf.get(PRINCIPAL), conf.get(KEYTAB)); System.out.println("UserGroupInformation.isLoginKeytabBased(): " +UserGroupInformation.isLoginKeytabBased()); flag = true; } catch (IOException e) { e.printStackTrace(); } return flag; }
relogin的代码样例:
public Boolean relogin(){ boolean flag = false; try { UserGroupInformation.getLoginUser().reloginFromKeytab(); System.out.println("UserGroupInformation.isLoginKeytabBased(): " +UserGroupInformation.isLoginKeytabBased()); flag = true; } catch (IOException e) { e.printStackTrace(); } return flag; }