Example usage for org.apache.hadoop.security UserGroupInformation createProxyUser

List of usage examples for org.apache.hadoop.security UserGroupInformation createProxyUser

Introduction

In this page you can find the example usage for org.apache.hadoop.security UserGroupInformation createProxyUser.

Prototype

@InterfaceAudience.Public
@InterfaceStability.Evolving
public static UserGroupInformation createProxyUser(String user, UserGroupInformation realUser) 

Source Link

Document

Create a proxy user using username of the effective user and the ugi of the real user.

Usage

From source file:uk.ac.gla.terrier.probos.controller.ControllerServer.java

License:Open Source License

protected int yarnJob(final JobInformation ji, final String requestorUserName) throws IOException {
    assert ji.scriptLocation != null;
    assert ji.folderLocation != null;
    final PBSJob job = ji.jobSpec;
    PrivilegedExceptionAction<Integer> submitAction = new PrivilegedExceptionAction<Integer>() {
        public Integer run() throws Exception {
            File luaFile = writeJobKittenSpec(job, ji.scriptLocation, ji.jobId, false);
            Configuration kConf = new Configuration(yConf);
            kConf.set(LocalDataHelper.APP_BASE_DIR, ji.folderLocation.toUri().toString());
            YarnClientParameters params = new LuaYarnClientParameters(luaFile.toString(),
                    Constants.PRODUCT_NAME, kConf, extraLuaValues, extraLocalResources);
            ji.jobSpec.setQueue(params.getQueue());

            Credentials creds = new Credentials();

            //create delegation tokens
            //interactive rpc
            InetSocketAddress addr = NetUtils.getConnectAddress(interactiveRpcserver);
            Text host = new Text(addr.getAddress().getHostAddress() + ":" + addr.getPort());
            ProbosDelegationTokenIdentifier tokenId = secretManager.createIdentifier();
            Token<ProbosDelegationTokenIdentifier> delgationToken = new Token<ProbosDelegationTokenIdentifier>(
                    tokenId, secretManager);
            delgationToken.setService(host);
            creds.addToken(host, delgationToken);
            LOG.info("Interactive: Generated token for " + creds.toString() + " : " + delgationToken);

            //client rpc
            tokenId = secretManager.createIdentifier();
            delgationToken = new Token<ProbosDelegationTokenIdentifier>(tokenId, secretManager);
            addr = NetUtils.getConnectAddress(clientRpcserver);
            host = new Text(addr.getAddress().getHostAddress() + ":" + addr.getPort());
            delgationToken.setService(host);
            creds.addToken(host, delgationToken);
            LOG.info("Client: Generated token for " + creds.toString() + " : " + delgationToken);

            //master rpc
            tokenId = secretManager.createIdentifier();
            delgationToken = new Token<ProbosDelegationTokenIdentifier>(tokenId, secretManager);
            addr = NetUtils.getConnectAddress(masterRpcserver);
            host = new Text(addr.getAddress().getHostAddress() + ":" + addr.getPort());
            delgationToken.setService(host);
            creds.addToken(host, delgationToken);
            LOG.info("Master: Generated token for " + creds.toString() + " : " + delgationToken);

            YarnClientService service = new YarnClientServiceImpl(params, creds);
            service.startAndWait();/*from   w w w  .ja  va  2 s  . c om*/
            if (!service.isRunning()) {
                LOG.error("YarnClientService failed to startup, exiting...");
                jobArray.remove(ji.jobId);
                return ji.jobId;
            }
            ji.kitten = service;
            ji.modify();
            return ji.jobId;
        }
    };
    //setuid to the requestor's user id
    UserGroupInformation proxyUser = UserGroupInformation.createProxyUser(requestorUserName,
            UserGroupInformation.getLoginUser());
    Integer rtr = null;
    try {
        if (UserGroupInformation.isSecurityEnabled())
            rtr = proxyUser.doAs(submitAction);
        else
            rtr = submitAction.run();
        ji.proxyUser = proxyUser;
        ji.modify();
        runningJobs.inc();
        return rtr.intValue();
    } catch (Exception e) {
        LOG.error("job did not submit!", e);
        return -1;
    }

}