Search in sources :

Example 16 with RegisterNodeManagerResponse

use of org.apache.hadoop.yarn.server.api.protocolrecords.RegisterNodeManagerResponse in project hadoop by apache.

the class TestResourceTrackerService method testSetRMIdentifierInRegistration.

@Test
public void testSetRMIdentifierInRegistration() throws Exception {
    Configuration conf = new Configuration();
    rm = new MockRM(conf);
    rm.start();
    MockNM nm = new MockNM("host1:1234", 5120, rm.getResourceTrackerService());
    RegisterNodeManagerResponse response = nm.registerNode();
    // Verify the RMIdentifier is correctly set in RegisterNodeManagerResponse
    Assert.assertEquals(ResourceManager.getClusterTimeStamp(), response.getRMIdentifier());
}
Also used : Configuration(org.apache.hadoop.conf.Configuration) YarnConfiguration(org.apache.hadoop.yarn.conf.YarnConfiguration) RegisterNodeManagerResponse(org.apache.hadoop.yarn.server.api.protocolrecords.RegisterNodeManagerResponse) Test(org.junit.Test)

Example 17 with RegisterNodeManagerResponse

use of org.apache.hadoop.yarn.server.api.protocolrecords.RegisterNodeManagerResponse in project hadoop by apache.

the class TestRMNMSecretKeys method validateRMNMKeyExchange.

private void validateRMNMKeyExchange(YarnConfiguration conf) throws Exception {
    // Default rolling and activation intervals are large enough, no need to
    // intervene
    final DrainDispatcher dispatcher = new DrainDispatcher();
    ResourceManager rm = new ResourceManager() {

        @Override
        protected void doSecureLogin() throws IOException {
        // Do nothing.
        }

        @Override
        protected Dispatcher createDispatcher() {
            return dispatcher;
        }

        @Override
        protected void startWepApp() {
        // Don't need it, skip.
        }
    };
    rm.init(conf);
    rm.start();
    // Testing ContainerToken and NMToken
    String containerToken = "Container Token : ";
    String nmToken = "NM Token : ";
    MockNM nm = new MockNM("host:1234", 3072, rm.getResourceTrackerService());
    RegisterNodeManagerResponse registrationResponse = nm.registerNode();
    MasterKey containerTokenMasterKey = registrationResponse.getContainerTokenMasterKey();
    Assert.assertNotNull(containerToken + "Registration should cause a key-update!", containerTokenMasterKey);
    MasterKey nmTokenMasterKey = registrationResponse.getNMTokenMasterKey();
    Assert.assertNotNull(nmToken + "Registration should cause a key-update!", nmTokenMasterKey);
    dispatcher.await();
    NodeHeartbeatResponse response = nm.nodeHeartbeat(true);
    Assert.assertNull(containerToken + "First heartbeat after registration shouldn't get any key updates!", response.getContainerTokenMasterKey());
    Assert.assertNull(nmToken + "First heartbeat after registration shouldn't get any key updates!", response.getNMTokenMasterKey());
    dispatcher.await();
    response = nm.nodeHeartbeat(true);
    Assert.assertNull(containerToken + "Even second heartbeat after registration shouldn't get any key updates!", response.getContainerTokenMasterKey());
    Assert.assertNull(nmToken + "Even second heartbeat after registration shouldn't get any key updates!", response.getContainerTokenMasterKey());
    dispatcher.await();
    // Let's force a roll-over
    rm.getRMContext().getContainerTokenSecretManager().rollMasterKey();
    rm.getRMContext().getNMTokenSecretManager().rollMasterKey();
    // Heartbeats after roll-over and before activation should be fine.
    response = nm.nodeHeartbeat(true);
    Assert.assertNotNull(containerToken + "Heartbeats after roll-over and before activation should not err out.", response.getContainerTokenMasterKey());
    Assert.assertNotNull(nmToken + "Heartbeats after roll-over and before activation should not err out.", response.getNMTokenMasterKey());
    Assert.assertEquals(containerToken + "Roll-over should have incremented the key-id only by one!", containerTokenMasterKey.getKeyId() + 1, response.getContainerTokenMasterKey().getKeyId());
    Assert.assertEquals(nmToken + "Roll-over should have incremented the key-id only by one!", nmTokenMasterKey.getKeyId() + 1, response.getNMTokenMasterKey().getKeyId());
    dispatcher.await();
    response = nm.nodeHeartbeat(true);
    Assert.assertNull(containerToken + "Second heartbeat after roll-over shouldn't get any key updates!", response.getContainerTokenMasterKey());
    Assert.assertNull(nmToken + "Second heartbeat after roll-over shouldn't get any key updates!", response.getNMTokenMasterKey());
    dispatcher.await();
    // Let's force activation
    rm.getRMContext().getContainerTokenSecretManager().activateNextMasterKey();
    rm.getRMContext().getNMTokenSecretManager().activateNextMasterKey();
    response = nm.nodeHeartbeat(true);
    Assert.assertNull(containerToken + "Activation shouldn't cause any key updates!", response.getContainerTokenMasterKey());
    Assert.assertNull(nmToken + "Activation shouldn't cause any key updates!", response.getNMTokenMasterKey());
    dispatcher.await();
    response = nm.nodeHeartbeat(true);
    Assert.assertNull(containerToken + "Even second heartbeat after activation shouldn't get any key updates!", response.getContainerTokenMasterKey());
    Assert.assertNull(nmToken + "Even second heartbeat after activation shouldn't get any key updates!", response.getNMTokenMasterKey());
    dispatcher.await();
    rm.stop();
}
Also used : DrainDispatcher(org.apache.hadoop.yarn.event.DrainDispatcher) NodeHeartbeatResponse(org.apache.hadoop.yarn.server.api.protocolrecords.NodeHeartbeatResponse) MockNM(org.apache.hadoop.yarn.server.resourcemanager.MockNM) MasterKey(org.apache.hadoop.yarn.server.api.records.MasterKey) RegisterNodeManagerResponse(org.apache.hadoop.yarn.server.api.protocolrecords.RegisterNodeManagerResponse) ResourceManager(org.apache.hadoop.yarn.server.resourcemanager.ResourceManager)

Example 18 with RegisterNodeManagerResponse

use of org.apache.hadoop.yarn.server.api.protocolrecords.RegisterNodeManagerResponse in project hadoop by apache.

the class MockNM method registerNode.

public RegisterNodeManagerResponse registerNode(List<NMContainerStatus> containerReports, List<ApplicationId> runningApplications) throws Exception {
    RegisterNodeManagerRequest req = Records.newRecord(RegisterNodeManagerRequest.class);
    req.setNodeId(nodeId);
    req.setHttpPort(httpPort);
    Resource resource = BuilderUtils.newResource(memory, vCores);
    req.setResource(resource);
    req.setContainerStatuses(containerReports);
    req.setNMVersion(version);
    req.setRunningApplications(runningApplications);
    RegisterNodeManagerResponse registrationResponse = resourceTracker.registerNodeManager(req);
    this.currentContainerTokenMasterKey = registrationResponse.getContainerTokenMasterKey();
    this.currentNMTokenMasterKey = registrationResponse.getNMTokenMasterKey();
    Resource newResource = registrationResponse.getResource();
    if (newResource != null) {
        memory = (int) newResource.getMemorySize();
        vCores = newResource.getVirtualCores();
    }
    containerStats.clear();
    if (containerReports != null) {
        for (NMContainerStatus report : containerReports) {
            if (report.getContainerState() != ContainerState.COMPLETE) {
                containerStats.put(report.getContainerId(), ContainerStatus.newInstance(report.getContainerId(), report.getContainerState(), report.getDiagnostics(), report.getContainerExitStatus()));
            }
        }
    }
    return registrationResponse;
}
Also used : RegisterNodeManagerRequest(org.apache.hadoop.yarn.server.api.protocolrecords.RegisterNodeManagerRequest) NMContainerStatus(org.apache.hadoop.yarn.server.api.protocolrecords.NMContainerStatus) Resource(org.apache.hadoop.yarn.api.records.Resource) RegisterNodeManagerResponse(org.apache.hadoop.yarn.server.api.protocolrecords.RegisterNodeManagerResponse)

Example 19 with RegisterNodeManagerResponse

use of org.apache.hadoop.yarn.server.api.protocolrecords.RegisterNodeManagerResponse in project hadoop by apache.

the class NodeStatusUpdaterImpl method registerWithRM.

@VisibleForTesting
protected void registerWithRM() throws YarnException, IOException {
    RegisterNodeManagerResponse regNMResponse;
    Set<NodeLabel> nodeLabels = nodeLabelsHandler.getNodeLabelsForRegistration();
    // during RM recovery
    synchronized (this.context) {
        List<NMContainerStatus> containerReports = getNMContainerStatuses();
        RegisterNodeManagerRequest request = RegisterNodeManagerRequest.newInstance(nodeId, httpPort, totalResource, nodeManagerVersionId, containerReports, getRunningApplications(), nodeLabels, physicalResource);
        if (containerReports != null) {
            LOG.info("Registering with RM using containers :" + containerReports);
        }
        regNMResponse = resourceTracker.registerNodeManager(request);
        // Make sure rmIdentifier is set before we release the lock
        this.rmIdentifier = regNMResponse.getRMIdentifier();
    }
    // if the Resource Manager instructs NM to shutdown.
    if (NodeAction.SHUTDOWN.equals(regNMResponse.getNodeAction())) {
        String message = "Message from ResourceManager: " + regNMResponse.getDiagnosticsMessage();
        throw new YarnRuntimeException("Recieved SHUTDOWN signal from Resourcemanager, Registration of NodeManager failed, " + message);
    }
    // if ResourceManager version is too old then shutdown
    if (!minimumResourceManagerVersion.equals("NONE")) {
        if (minimumResourceManagerVersion.equals("EqualToNM")) {
            minimumResourceManagerVersion = nodeManagerVersionId;
        }
        String rmVersion = regNMResponse.getRMVersion();
        if (rmVersion == null) {
            String message = "The Resource Manager's did not return a version. " + "Valid version cannot be checked.";
            throw new YarnRuntimeException("Shutting down the Node Manager. " + message);
        }
        if (VersionUtil.compareVersions(rmVersion, minimumResourceManagerVersion) < 0) {
            String message = "The Resource Manager's version (" + rmVersion + ") is less than the minimum " + "allowed version " + minimumResourceManagerVersion;
            throw new YarnRuntimeException("Shutting down the Node Manager on RM " + "version error, " + message);
        }
    }
    this.registeredWithRM = true;
    MasterKey masterKey = regNMResponse.getContainerTokenMasterKey();
    // StatusUpdater#start().
    if (masterKey != null) {
        this.context.getContainerTokenSecretManager().setMasterKey(masterKey);
    }
    masterKey = regNMResponse.getNMTokenMasterKey();
    if (masterKey != null) {
        this.context.getNMTokenSecretManager().setMasterKey(masterKey);
    }
    StringBuilder successfullRegistrationMsg = new StringBuilder();
    successfullRegistrationMsg.append("Registered with ResourceManager as ").append(this.nodeId);
    Resource newResource = regNMResponse.getResource();
    if (newResource != null) {
        updateNMResource(newResource);
        successfullRegistrationMsg.append(" with updated total resource of ").append(this.totalResource);
    } else {
        successfullRegistrationMsg.append(" with total resource of ").append(this.totalResource);
    }
    successfullRegistrationMsg.append(nodeLabelsHandler.verifyRMRegistrationResponseForNodeLabels(regNMResponse));
    LOG.info(successfullRegistrationMsg);
    LOG.info("Notifying ContainerManager to unblock new container-requests");
    this.context.getContainerManager().setBlockNewContainerRequests(false);
}
Also used : YarnRuntimeException(org.apache.hadoop.yarn.exceptions.YarnRuntimeException) UnRegisterNodeManagerRequest(org.apache.hadoop.yarn.server.api.protocolrecords.UnRegisterNodeManagerRequest) RegisterNodeManagerRequest(org.apache.hadoop.yarn.server.api.protocolrecords.RegisterNodeManagerRequest) NodeLabel(org.apache.hadoop.yarn.api.records.NodeLabel) NMContainerStatus(org.apache.hadoop.yarn.server.api.protocolrecords.NMContainerStatus) MasterKey(org.apache.hadoop.yarn.server.api.records.MasterKey) RegisterNodeManagerResponse(org.apache.hadoop.yarn.server.api.protocolrecords.RegisterNodeManagerResponse) Resource(org.apache.hadoop.yarn.api.records.Resource) VisibleForTesting(com.google.common.annotations.VisibleForTesting)

Example 20 with RegisterNodeManagerResponse

use of org.apache.hadoop.yarn.server.api.protocolrecords.RegisterNodeManagerResponse in project hadoop by apache.

the class LocalRMInterface method registerNodeManager.

@Override
public RegisterNodeManagerResponse registerNodeManager(RegisterNodeManagerRequest request) throws YarnException, IOException {
    RegisterNodeManagerResponse response = recordFactory.newRecordInstance(RegisterNodeManagerResponse.class);
    MasterKey masterKey = new MasterKeyPBImpl();
    masterKey.setKeyId(123);
    masterKey.setBytes(ByteBuffer.wrap(new byte[] { new Integer(123).byteValue() }));
    response.setContainerTokenMasterKey(masterKey);
    response.setNMTokenMasterKey(masterKey);
    return response;
}
Also used : MasterKeyPBImpl(org.apache.hadoop.yarn.server.api.records.impl.pb.MasterKeyPBImpl) MasterKey(org.apache.hadoop.yarn.server.api.records.MasterKey) UnRegisterNodeManagerResponse(org.apache.hadoop.yarn.server.api.protocolrecords.UnRegisterNodeManagerResponse) RegisterNodeManagerResponse(org.apache.hadoop.yarn.server.api.protocolrecords.RegisterNodeManagerResponse)

Aggregations

RegisterNodeManagerResponse (org.apache.hadoop.yarn.server.api.protocolrecords.RegisterNodeManagerResponse)20 RegisterNodeManagerRequest (org.apache.hadoop.yarn.server.api.protocolrecords.RegisterNodeManagerRequest)14 Test (org.junit.Test)14 Configuration (org.apache.hadoop.conf.Configuration)13 Resource (org.apache.hadoop.yarn.api.records.Resource)13 YarnConfiguration (org.apache.hadoop.yarn.conf.YarnConfiguration)13 UnRegisterNodeManagerRequest (org.apache.hadoop.yarn.server.api.protocolrecords.UnRegisterNodeManagerRequest)13 NodeId (org.apache.hadoop.yarn.api.records.NodeId)12 IOException (java.io.IOException)7 NullRMNodeLabelsManager (org.apache.hadoop.yarn.server.resourcemanager.nodelabels.NullRMNodeLabelsManager)7 RMNodeLabelsManager (org.apache.hadoop.yarn.server.resourcemanager.nodelabels.RMNodeLabelsManager)7 NodeHeartbeatResponse (org.apache.hadoop.yarn.server.api.protocolrecords.NodeHeartbeatResponse)5 NMContainerStatus (org.apache.hadoop.yarn.server.api.protocolrecords.NMContainerStatus)3 NodeHeartbeatRequest (org.apache.hadoop.yarn.server.api.protocolrecords.NodeHeartbeatRequest)3 MasterKey (org.apache.hadoop.yarn.server.api.records.MasterKey)3 UnRegisterNodeManagerResponse (org.apache.hadoop.yarn.server.api.protocolrecords.UnRegisterNodeManagerResponse)2 MockNM (org.apache.hadoop.yarn.server.resourcemanager.MockNM)2 VisibleForTesting (com.google.common.annotations.VisibleForTesting)1 ArrayList (java.util.ArrayList)1 ContainerId (org.apache.hadoop.yarn.api.records.ContainerId)1