List of usage examples for org.apache.hadoop.security UserGroupInformation getCurrentUser
@InterfaceAudience.Public @InterfaceStability.Evolving public static UserGroupInformation getCurrentUser() throws IOException
From source file:ApplicationMaster.java
License:Apache License
/** * Main run function for the application master * * @throws YarnException/*from www.ja v a 2 s . co m*/ * @throws IOException */ @SuppressWarnings({ "unchecked" }) public void run() throws YarnException, IOException { LOG.info("Starting ApplicationMaster"); try { publishApplicationAttemptEvent(timelineClient, appAttemptID.toString(), DSEvent.DS_APP_ATTEMPT_START); } catch (Exception e) { LOG.error("App Attempt start event coud not be pulished for " + appAttemptID.toString(), e); } // Note: Credentials, Token, UserGroupInformation, DataOutputBuffer class // are marked as LimitedPrivate Credentials credentials = UserGroupInformation.getCurrentUser().getCredentials(); DataOutputBuffer dob = new DataOutputBuffer(); credentials.writeTokenStorageToStream(dob); // Now remove the AM->RM token so that containers cannot access it. Iterator<Token<?>> iter = credentials.getAllTokens().iterator(); LOG.info("Executing with tokens:"); while (iter.hasNext()) { Token<?> token = iter.next(); LOG.info(token); if (token.getKind().equals(AMRMTokenIdentifier.KIND_NAME)) { iter.remove(); } } allTokens = ByteBuffer.wrap(dob.getData(), 0, dob.getLength()); // Create appSubmitterUgi and add original tokens to it String appSubmitterUserName = System.getenv(ApplicationConstants.Environment.USER.name()); appSubmitterUgi = UserGroupInformation.createRemoteUser(appSubmitterUserName); appSubmitterUgi.addCredentials(credentials); AMRMClientAsync.CallbackHandler allocListener = new RMCallbackHandler(); amRMClient = AMRMClientAsync.createAMRMClientAsync(1000, allocListener); amRMClient.init(conf); amRMClient.start(); containerListener = createNMCallbackHandler(); nmClientAsync = new NMClientAsyncImpl(containerListener); nmClientAsync.init(conf); nmClientAsync.start(); // Setup local RPC Server to accept status requests directly from clients // TODO need to setup a protocol for client to be able to communicate to // the RPC server // TODO use the rpc port info to register with the RM for the client to // send requests to this app master // Register self with ResourceManager // This will start heartbeating to the RM appMasterHostname = NetUtils.getHostname(); RegisterApplicationMasterResponse response = amRMClient.registerApplicationMaster(appMasterHostname, appMasterRpcPort, appMasterTrackingUrl); // Dump out information about cluster capability as seen by the // resource manager int maxMem = response.getMaximumResourceCapability().getMemory(); LOG.info("Max mem capabililty of resources in this cluster " + maxMem); int maxVCores = response.getMaximumResourceCapability().getVirtualCores(); LOG.info("Max vcores capabililty of resources in this cluster " + maxVCores); // A resource ask cannot exceed the max. if (containerMemory > maxMem) { LOG.info("Container memory specified above max threshold of cluster." + " Using max value." + ", specified=" + containerMemory + ", max=" + maxMem); containerMemory = maxMem; } if (containerVirtualCores > maxVCores) { LOG.info("Container virtual cores specified above max threshold of cluster." + " Using max value." + ", specified=" + containerVirtualCores + ", max=" + maxVCores); containerVirtualCores = maxVCores; } List<Container> previousAMRunningContainers = response.getContainersFromPreviousAttempts(); LOG.info(appAttemptID + " received " + previousAMRunningContainers.size() + " previous attempts' running containers on AM registration."); numAllocatedContainers.addAndGet(previousAMRunningContainers.size()); int numTotalContainersToRequest = numTotalContainers - previousAMRunningContainers.size(); // Setup ask for containers from RM // Send request for containers to RM // Until we get our fully allocated quota, we keep on polling RM for // containers // Keep looping until all the containers are launched and shell script // executed on them ( regardless of success/failure). for (int i = 0; i < numTotalContainersToRequest; ++i) { ContainerRequest containerAsk = setupContainerAskForRM(); amRMClient.addContainerRequest(containerAsk); } numRequestedContainers.set(numTotalContainers); try { publishApplicationAttemptEvent(timelineClient, appAttemptID.toString(), DSEvent.DS_APP_ATTEMPT_END); } catch (Exception e) { LOG.error("App Attempt start event coud not be pulished for " + appAttemptID.toString(), e); } }
From source file:ApplicationMaster.java
License:Apache License
private static void publishContainerStartEvent(TimelineClient timelineClient, Container container) throws IOException, YarnException { TimelineEntity entity = new TimelineEntity(); entity.setEntityId(container.getId().toString()); entity.setEntityType(DSEntity.DS_CONTAINER.toString()); entity.addPrimaryFilter("user", UserGroupInformation.getCurrentUser().getShortUserName()); TimelineEvent event = new TimelineEvent(); event.setTimestamp(System.currentTimeMillis()); event.setEventType(DSEvent.DS_CONTAINER_START.toString()); event.addEventInfo("Node", container.getNodeId().toString()); event.addEventInfo("Resources", container.getResource().toString()); entity.addEvent(event);/* ww w . j a v a2 s . com*/ timelineClient.putEntities(entity); }
From source file:ApplicationMaster.java
License:Apache License
private static void publishContainerEndEvent(TimelineClient timelineClient, ContainerStatus container) throws IOException, YarnException { TimelineEntity entity = new TimelineEntity(); entity.setEntityId(container.getContainerId().toString()); entity.setEntityType(DSEntity.DS_CONTAINER.toString()); entity.addPrimaryFilter("user", UserGroupInformation.getCurrentUser().getShortUserName()); TimelineEvent event = new TimelineEvent(); event.setTimestamp(System.currentTimeMillis()); event.setEventType(DSEvent.DS_CONTAINER_END.toString()); event.addEventInfo("State", container.getState().name()); event.addEventInfo("Exit Status", container.getExitStatus()); entity.addEvent(event);/*from w w w .ja v a2s .c o m*/ timelineClient.putEntities(entity); }
From source file:ApplicationMaster.java
License:Apache License
private static void publishApplicationAttemptEvent(TimelineClient timelineClient, String appAttemptId, DSEvent appEvent) throws IOException, YarnException { TimelineEntity entity = new TimelineEntity(); entity.setEntityId(appAttemptId);/*from w w w. j av a2s . com*/ entity.setEntityType(DSEntity.DS_APP_ATTEMPT.toString()); entity.addPrimaryFilter("user", UserGroupInformation.getCurrentUser().getShortUserName()); TimelineEvent event = new TimelineEvent(); event.setEventType(appEvent.toString()); event.setTimestamp(System.currentTimeMillis()); entity.addEvent(event); timelineClient.putEntities(entity); }
From source file:ParascaleFileSystem.java
License:Apache License
/** * {@inheritDoc}//w w w. ja v a 2s. c o m */ @Override public void initialize(final URI uri, final Configuration conf) throws IOException { final URI rawUri; final RawParascaleFileSystem rawParascaleFileSystem; UserGroupInformation groupInformation; try { if (conf.get("hadoop.job.ugi") != null) { String username = new StringTokenizer(conf.get("hadoop.job.ugi"), ",").nextToken(); groupInformation = UserGroupInformation.createRemoteUser(username); } else { groupInformation = UserGroupInformation.getCurrentUser(); } rawParascaleFileSystem = new RawParascaleFileSystem(groupInformation); fs = conf.getBoolean(CRC_FILESYSTEM, false) ? new ChecksumFsWrapper(rawParascaleFileSystem) : rawParascaleFileSystem; rawUri = new URI(uri.getScheme(), uri.getAuthority(), null, null, null); } catch (final URISyntaxException e) { throw (IOException) new IOException().initCause(e); } // initialize with the raw URI - RawFS expects it without a path! fs.initialize(rawUri, conf); if (!rawParascaleFileSystem.isMountPointAbsolute()) { throw new IOException( "Mountpoint " + rawParascaleFileSystem.getMountPoint() + " is not an absolute path"); } if (!rawParascaleFileSystem.mountPointExists()) { throw new IOException("WorkingDirectory does not exist - can not mount Parascale " + "filesystem at " + rawParascaleFileSystem.getMountPath()); } if (!rawParascaleFileSystem.createHomeDirectory()) { throw new IOException("Can not create HomeDirectory"); } }
From source file:alluxio.hadoop.AbstractFileSystemTest.java
License:Apache License
private void mockUserGroupInformation() throws IOException { // need to mock out since FileSystem.get calls UGI, which some times has issues on some systems PowerMockito.mockStatic(UserGroupInformation.class); final UserGroupInformation ugi = Mockito.mock(UserGroupInformation.class); Mockito.when(UserGroupInformation.getCurrentUser()).thenReturn(ugi); }
From source file:alluxio.yarn.ApplicationMaster.java
License:Apache License
/** * @param args Command line arguments to launch application master *//*from w w w. j av a 2 s.com*/ public static void main(String[] args) { Options options = new Options(); options.addOption("num_workers", true, "Number of Alluxio workers to launch. Default 1"); options.addOption("master_address", true, "(Required) Address to run Alluxio master"); options.addOption("resource_path", true, "(Required) HDFS path containing the Application Master"); try { LOG.info("Starting Application Master with args {}", Arrays.toString(args)); final CommandLine cliParser = new GnuParser().parse(options, args); YarnConfiguration conf = new YarnConfiguration(); UserGroupInformation.setConfiguration(conf); if (UserGroupInformation.isSecurityEnabled()) { String user = System.getenv("ALLUXIO_USER"); UserGroupInformation ugi = UserGroupInformation.createRemoteUser(user); for (Token token : UserGroupInformation.getCurrentUser().getTokens()) { ugi.addToken(token); } LOG.info("UserGroupInformation: " + ugi); ugi.doAs(new PrivilegedExceptionAction<Void>() { @Override public Void run() throws Exception { runApplicationMaster(cliParser); return null; } }); } else { runApplicationMaster(cliParser); } } catch (Exception e) { LOG.error("Error running Application Master", e); System.exit(1); } }
From source file:alluxio.yarn.ApplicationMaster.java
License:Apache License
/** * Starts the application master.//from w ww.j a v a 2s. co m * * @throws IOException if registering the application master fails due to an IO error * @throws YarnException if registering the application master fails due to an internal Yarn error */ public void start() throws IOException, YarnException { if (UserGroupInformation.isSecurityEnabled()) { Credentials credentials = UserGroupInformation.getCurrentUser().getCredentials(); DataOutputBuffer credentialsBuffer = new DataOutputBuffer(); credentials.writeTokenStorageToStream(credentialsBuffer); // Now remove the AM -> RM token so that containers cannot access it. Iterator<Token<?>> iter = credentials.getAllTokens().iterator(); while (iter.hasNext()) { Token<?> token = iter.next(); if (token.getKind().equals(AMRMTokenIdentifier.KIND_NAME)) { iter.remove(); } } mAllTokens = ByteBuffer.wrap(credentialsBuffer.getData(), 0, credentialsBuffer.getLength()); } mNMClient.init(mYarnConf); mNMClient.start(); mRMClient.init(mYarnConf); mRMClient.start(); mYarnClient.init(mYarnConf); mYarnClient.start(); // Register with ResourceManager String hostname = NetworkAddressUtils.getLocalHostName(); mRMClient.registerApplicationMaster(hostname, 0 /* port */, "" /* tracking url */); LOG.info("ApplicationMaster registered"); }
From source file:alluxio.yarn.ApplicationMaster.java
License:Apache License
private static Map<String, String> setupWorkerEnvironment(String masterContainerNetAddress, int ramdiskMemInMB) { Map<String, String> env = setupCommonEnvironment(); env.put("ALLUXIO_MASTER_HOSTNAME", masterContainerNetAddress); env.put("ALLUXIO_WORKER_MEMORY_SIZE", FormatUtils.getSizeFromBytes((long) ramdiskMemInMB * Constants.MB)); if (UserGroupInformation.isSecurityEnabled()) { try {/*from www. j a v a2 s .co m*/ env.put("ALLUXIO_USER", UserGroupInformation.getCurrentUser().getShortUserName()); } catch (IOException e) { LOG.error("Get user name failed", e); } } return env; }
From source file:alluxio.yarn.ApplicationMaster.java
License:Apache License
private static Map<String, String> setupCommonEnvironment() { // Setup the environment needed for the launch context. Map<String, String> env = new HashMap<String, String>(); env.put("ALLUXIO_HOME", ApplicationConstants.Environment.PWD.$()); env.put("ALLUXIO_RAM_FOLDER", ApplicationConstants.Environment.LOCAL_DIRS.$()); if (UserGroupInformation.isSecurityEnabled()) { try {/* w ww. j a v a2 s . com*/ env.put("ALLUXIO_USER", UserGroupInformation.getCurrentUser().getShortUserName()); } catch (IOException e) { LOG.error("Get user name failed", e); } } return env; }