ApplicationMaster::ApplicationMaster(string &schedHost, string &schedPort, UserInfo &user, const string &tokenService) { Yarn::Internal::shared_ptr<Yarn::Config> conf = DefaultConfig().getConfig(); Yarn::Internal::SessionConfig sessionConfig(*conf); RpcAuth rpcAuth(user, AuthMethod::TOKEN); rmClient = (void*) new ApplicationMasterProtocol(schedHost, schedPort, tokenService, sessionConfig, rpcAuth); }
ContainerStatus ContainerManagement::getContainerStatus(Container &container, Token &nmToken) { //1. setup Connection to NodeManager string host = container.getNodeId().getHost(); ostringstream oss; oss << container.getNodeId().getPort(); string port(oss.str()); LOG(INFO, "ContainerManagement, is going to connect to NM [%s:%s] to getContainerStatus container", host.c_str(), port.c_str()); UserInfo user = UserInfo::LocalUser(); Yarn::Token anotherToken; anotherToken.setIdentifier(nmToken.getIdentifier()); anotherToken.setKind(nmToken.getKind()); anotherToken.setPassword(nmToken.getPassword()); anotherToken.setService(nmToken.getService()); user.addToken(anotherToken); RpcAuth rpcAuth(user, AuthMethod::TOKEN); Yarn::Config config; SessionConfig sessionConfig(config); #ifdef MOCKTEST ContainerManagementProtocol *nmClient = stub->getContainerManagementProtocol(); #else ContainerManagementProtocol *nmClient = new ContainerManagementProtocol( host, port, anotherToken.getService(), sessionConfig, rpcAuth); #endif ContainerId cid = container.getId(); list<ContainerId> cids; cids.push_back(cid); GetContainerStatusesRequest request; request.setContainerIds(cids); GetContainerStatusesResponse response = nmClient->getContainerStatuses(request); //3. free delete nmClient; list<ContainerStatus> statusList = response.getContainerStatuses(); if (statusList.size() > 0){ list<ContainerStatus>::iterator statusHead = statusList.begin(); return (*statusHead); }else{ ContainerStatus status; return status; } }
StartContainerResponse ContainerManagement::startContainer(Container &container, StartContainerRequest &request, Token &nmToken) { //1. setup Connection to NodeManager string host = container.getNodeId().getHost(); ostringstream oss; oss << container.getNodeId().getPort(); string port(oss.str()); LOG(INFO, "ContainerManagement::startContainer, is going to connect to NM [%s:%s] to start container", host.c_str(), port.c_str()); UserInfo user = UserInfo::LocalUser(); Yarn::Token anotherToken; anotherToken.setIdentifier(nmToken.getIdentifier()); anotherToken.setKind(nmToken.getKind()); anotherToken.setPassword(nmToken.getPassword()); anotherToken.setService(nmToken.getService()); user.addToken(anotherToken); RpcAuth rpcAuth(user, AuthMethod::TOKEN); Yarn::Config config; SessionConfig sessionConfig(config); #ifdef MOCKTEST ContainerManagementProtocol *nmClient = stub->getContainerManagementProtocol(); #else ContainerManagementProtocol *nmClient = new ContainerManagementProtocol( host, port, anotherToken.getService(), sessionConfig, rpcAuth); #endif //2. startContainers StartContainersRequest scsRequest; list<StartContainerRequest> requests; requests.push_back(request); scsRequest.setStartContainerRequests(requests); StartContainersResponse scsResponse = nmClient->startContainers(scsRequest); StartContainerResponse scResponse; scResponse.setServicesMetaData(scsResponse.getServicesMetaData()); LOG(INFO, "ContainerManagement::startContainer, after start a container, id:%d on NM [%s:%s]", container.getId().getId(), host.c_str(), port.c_str()); //3. free delete nmClient; return scResponse; }
ApplicationClientProtocol::ApplicationClientProtocol(const string &rmUser, const string & rmHost, const string & rmPort, const string & tokenService,const SessionConfig & c) : client(RpcClient::getClient()), conf(c), protocol(APP_CLIENT_PROTOCOL_VERSION, APP_CLIENT_PROTOCOL,APP_CLIENT_DELEGATION_TOKEN_KIND), server(tokenService, rmHost, rmPort) { /* create RpcAuth for rpc method, * can be SIMPLE or KERBEROS */ if (RpcAuth::ParseMethod(c.getRpcAuthMethod()) == KERBEROS) { /* * If using KERBEROS, rmUser should be principal name. */ Yarn::Internal::UserInfo user(rmUser); user.setRealUser(user.getEffectiveUser()); Yarn::Internal::RpcAuth rpcAuth(user, KERBEROS); auth = rpcAuth; } else { Yarn::Internal::UserInfo user = Yarn::Internal::UserInfo::LocalUser(); Yarn::Internal::RpcAuth rpcAuth(user, SIMPLE); auth = rpcAuth; } }
void ContainerManagement::stopContainer(Container &container, Token &nmToken) { //1. setup Connection to NodeManager string host = container.getNodeId().getHost(); ostringstream oss; oss << container.getNodeId().getPort(); string port(oss.str()); LOG(INFO, "ContainerManagement::startContainer, is going to connect to NM [%s:%s] to stop container", host.c_str(), port.c_str()); UserInfo user = UserInfo::LocalUser(); Yarn::Token anotherToken; anotherToken.setIdentifier(nmToken.getIdentifier()); anotherToken.setKind(nmToken.getKind()); anotherToken.setPassword(nmToken.getPassword()); anotherToken.setService(nmToken.getService()); user.addToken(anotherToken); RpcAuth rpcAuth(user, AuthMethod::TOKEN); Yarn::Config config; SessionConfig sessionConfig(config); #ifdef MOCKTEST ContainerManagementProtocol *nmClient = stub->getContainerManagementProtocol(); #else ContainerManagementProtocol *nmClient = new ContainerManagementProtocol( host, port, anotherToken.getService(), sessionConfig, rpcAuth); #endif //2. stopContainers ContainerId cid = container.getId(); list<ContainerId> cids; cids.push_back(cid); StopContainersRequest request; request.setContainerIds(cids); nmClient->stopContainers(request); //3. free delete nmClient; }
ApplicationMaster::ApplicationMaster(string &schedHost, string &schedPort, UserInfo &user, const string &tokenService) { Yarn::Internal::shared_ptr<Yarn::Config> conf = DefaultConfig().getConfig(); Yarn::Internal::SessionConfig sessionConfig(*conf); RpcAuth rpcAuth(user, AuthMethod::TOKEN); std::vector<RMInfo> rmInfos = RMInfo::getHARMInfo(*conf, YARN_RESOURCEMANAGER_SCHEDULER_HA); if (rmInfos.size() <= 1) { LOG(INFO, "ApplicationClient RM Scheduler HA is disable."); enableRMSchedulerHA = false; maxRMHARetry = 0; } else { LOG(INFO, "ApplicationClient RM Scheduler HA is enable. Number of RM scheduler: %d", rmInfos.size()); enableRMSchedulerHA = true; maxRMHARetry = sessionConfig.getRpcMaxHaRetry(); } if (!enableRMSchedulerHA) { appMasterProtos.push_back( std::shared_ptr<ApplicationMasterProtocol>( new ApplicationMasterProtocol(schedHost, schedPort, tokenService, sessionConfig, rpcAuth))); } else { /* * iterate RMInfo vector and create 1-1 applicationMasterProtocol for each standby RM scheduler. */ for (size_t i = 0; i < rmInfos.size(); ++i) { appMasterProtos.push_back( std::shared_ptr<ApplicationMasterProtocol>( new ApplicationMasterProtocol(rmInfos[i].getHost(), rmInfos[i].getPort(), tokenService, sessionConfig, rpcAuth))); LOG(INFO, "ApplicationMaster finds a standby RM scheduler, host:%s, port:%s", rmInfos[i].getHost().c_str(), rmInfos[i].getPort().c_str()); } } currentAppMasterProto = 0; }