001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018
019 package org.apache.hadoop.yarn.api.records;
020
021 import java.nio.ByteBuffer;
022 import java.util.List;
023 import java.util.Map;
024
025 import org.apache.hadoop.classification.InterfaceAudience.Public;
026 import org.apache.hadoop.classification.InterfaceStability.Stable;
027 import org.apache.hadoop.yarn.api.ContainerManager;
028
029 /**
030 * <p><code>ContainerLaunchContext</code> represents all of the information
031 * needed by the <code>NodeManager</code> to launch a container.</p>
032 *
033 * <p>It includes details such as:
034 * <ul>
035 * <li>{@link ContainerId} of the container.</li>
036 * <li>{@link Resource} allocated to the container.</li>
037 * <li>User to whom the container is allocated.</li>
038 * <li>Security tokens (if security is enabled).</li>
039 * <li>
040 * {@link LocalResource} necessary for running the container such
041 * as binaries, jar, shared-objects, side-files etc.
042 * </li>
043 * <li>Optional, application-specific binary service data.</li>
044 * <li>Environment variables for the launched process.</li>
045 * <li>Command to launch the container.</li>
046 * </ul>
047 * </p>
048 *
049 * @see ContainerManager#startContainer(org.apache.hadoop.yarn.api.protocolrecords.StartContainerRequest)
050 */
051 @Public
052 @Stable
053 public interface ContainerLaunchContext {
054 /**
055 * Get <code>ContainerId</code> of container to be launched.
056 * @return <code>ContainerId</code> of container to be launched
057 */
058 @Public
059 @Stable
060 ContainerId getContainerId();
061
062 /**
063 * Set <code>ContainerId</code> of container to be launched.
064 * @param containerId et <code>ContainerId</code> of container to be launched
065 */
066 @Public
067 @Stable
068 void setContainerId(ContainerId containerId);
069
070 /**
071 * Get the <em>user</em> to whom the container has been allocated.
072 * @return the <em>user</em> to whom the container has been allocated
073 */
074 @Public
075 @Stable
076 String getUser();
077
078 /**
079 * Set the <em>user</em> to whom the container has been allocated
080 * @param user <em>user</em> to whom the container has been allocated
081 */
082 @Public
083 @Stable
084 void setUser(String user);
085
086 /**
087 * Get the <code>Resource</code> allocated to the container by the
088 * <code>ResourceManager</code>.
089 * @return <code>Resource</code> allocated to the container by the
090 * <code>ResourceManager</code>
091 */
092 @Public
093 @Stable
094 Resource getResource();
095
096 /**
097 * Set the <code>Resource</code> allocated to the container by the
098 * <code>ResourceManager</code>.
099 * @param resource allocated resource
100 */
101 @Public
102 @Stable
103 void setResource(Resource resource);
104
105 /**
106 * Get security tokens (if security is enabled).
107 * @return security tokens (if security is enabled)
108 */
109 @Public
110 @Stable
111 ByteBuffer getContainerTokens();
112
113 /**
114 * Set security tokens (if security is enabled).
115 * @param containerToken security tokens
116 */
117 @Public
118 @Stable
119 void setContainerTokens(ByteBuffer containerToken);
120
121 /**
122 * Get <code>LocalResource</code> required by the container.
123 * @return all <code>LocalResource</code> required by the container
124 */
125 @Public
126 @Stable
127 Map<String, LocalResource> getLocalResources();
128
129 /**
130 * Set <code>LocalResource</code> required by the container. All pre-existing
131 * Map entries are cleared before adding the new Map
132 * @param localResources <code>LocalResource</code> required by the container
133 */
134 @Public
135 @Stable
136 void setLocalResources(Map<String, LocalResource> localResources);
137
138 /**
139 * Get application-specific binary <em>service data</em>.
140 * @return application-specific binary <em>service data</em>
141 */
142 @Public
143 @Stable
144 Map<String, ByteBuffer> getServiceData();
145
146 /**
147 * Set application-specific binary <em>service data</em>. All pre-existing Map
148 * entries are preserved.
149 * @param serviceData application-specific binary <em>service data</em>
150 */
151 @Public
152 @Stable
153 void setServiceData(Map<String, ByteBuffer> serviceData);
154
155 /**
156 * Get <em>environment variables</em> for the container.
157 * @return <em>environment variables</em> for the container
158 */
159 @Public
160 @Stable
161 Map<String, String> getEnvironment();
162
163 /**
164 * Add <em>environment variables</em> for the container. All pre-existing Map
165 * entries are cleared before adding the new Map
166 * @param environment <em>environment variables</em> for the container
167 */
168 @Public
169 @Stable
170 void setEnvironment(Map<String, String> environment);
171
172 /**
173 * Get the list of <em>commands</em> for launching the container.
174 * @return the list of <em>commands</em> for launching the container
175 */
176 @Public
177 @Stable
178 List<String> getCommands();
179
180 /**
181 * Add the list of <em>commands</em> for launching the container. All
182 * pre-existing List entries are cleared before adding the new List
183 * @param commands the list of <em>commands</em> for launching the container
184 */
185 @Public
186 @Stable
187 void setCommands(List<String> commands);
188
189 /**
190 * Get the <code>ApplicationACL</code>s for the application.
191 * @return all the <code>ApplicationACL</code>s
192 */
193 @Public
194 @Stable
195 public Map<ApplicationAccessType, String> getApplicationACLs();
196
197 /**
198 * Set the <code>ApplicationACL</code>s for the application. All pre-existing
199 * Map entries are cleared before adding the new Map
200 * @param acls <code>ApplicationACL</code>s for the application
201 */
202 @Public
203 @Stable
204 public void setApplicationACLs(Map<ApplicationAccessType, String> acls);
205 }