| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.apache.hadoop.yarn.util; |
| |
| import java.net.InetSocketAddress; |
| import java.net.URI; |
| import java.net.URISyntaxException; |
| |
| import org.apache.hadoop.classification.InterfaceAudience.Private; |
| import org.apache.hadoop.classification.InterfaceAudience.Public; |
| import org.apache.hadoop.classification.InterfaceStability; |
| import org.apache.hadoop.fs.Path; |
| import org.apache.hadoop.io.Text; |
| import org.apache.hadoop.security.SecurityUtil; |
| import org.apache.hadoop.security.token.Token; |
| import org.apache.hadoop.security.token.TokenIdentifier; |
| import org.apache.hadoop.yarn.api.records.ApplicationAttemptId; |
| import org.apache.hadoop.yarn.api.records.ApplicationId; |
| import org.apache.hadoop.yarn.api.records.ContainerId; |
| import org.apache.hadoop.yarn.api.records.NodeId; |
| import org.apache.hadoop.yarn.api.records.URL; |
| import org.apache.hadoop.yarn.factories.RecordFactory; |
| |
| |
| /** |
| * This class contains a set of utilities which help converting data structures |
| * from/to 'serializableFormat' to/from hadoop/nativejava data structures. |
| * |
| */ |
| @Public |
| public class ConverterUtils { |
| |
| public static final String APPLICATION_PREFIX = "application"; |
| public static final String CONTAINER_PREFIX = "container"; |
| public static final String APPLICATION_ATTEMPT_PREFIX = "appattempt"; |
| |
| /** |
| * return a hadoop path from a given url |
| * This method is deprecated, use {@link URL#toPath()} instead. |
| * |
| * @param url |
| * url to convert |
| * @return path from {@link URL} |
| * @throws URISyntaxException |
| */ |
| @Public |
| @Deprecated |
| public static Path getPathFromYarnURL(URL url) throws URISyntaxException { |
| return url.toPath(); |
| } |
| |
| /* |
| * This method is deprecated, use {@link URL#fromPath(Path)} instead. |
| */ |
| @Public |
| @Deprecated |
| public static URL getYarnUrlFromPath(Path path) { |
| return URL.fromPath(path); |
| } |
| |
| /* |
| * This method is deprecated, use {@link URL#fromURI(URI)} instead. |
| */ |
| @Public |
| @Deprecated |
| public static URL getYarnUrlFromURI(URI uri) { |
| return URL.fromURI(uri); |
| } |
| |
| /* |
| * This method is deprecated, use {@link ApplicationId#toString()} instead. |
| */ |
| @Public |
| @Deprecated |
| public static String toString(ApplicationId appId) { |
| return appId.toString(); |
| } |
| |
| /* |
| * This method is deprecated, use {@link ApplicationId#fromString(String)} |
| * instead. |
| */ |
| @Public |
| @Deprecated |
| public static ApplicationId toApplicationId(RecordFactory recordFactory, |
| String applicationIdStr) { |
| return ApplicationId.fromString(applicationIdStr); |
| } |
| |
| /* |
| * This method is deprecated, use {@link ContainerId#toString()} instead. |
| */ |
| @Public |
| @Deprecated |
| public static String toString(ContainerId cId) { |
| return cId == null ? null : cId.toString(); |
| } |
| |
| @Private |
| @InterfaceStability.Unstable |
| public static NodeId toNodeIdWithDefaultPort(String nodeIdStr) { |
| if (nodeIdStr.indexOf(":") < 0) { |
| return NodeId.fromString(nodeIdStr + ":0"); |
| } |
| return NodeId.fromString(nodeIdStr); |
| } |
| |
| /* |
| * This method is deprecated, use {@link NodeId#fromString(String)} instead. |
| */ |
| @Public |
| @Deprecated |
| public static NodeId toNodeId(String nodeIdStr) { |
| return NodeId.fromString(nodeIdStr); |
| } |
| |
| /* |
| * This method is deprecated, use {@link ContainerId#fromString(String)} |
| * instead. |
| */ |
| @Public |
| @Deprecated |
| public static ContainerId toContainerId(String containerIdStr) { |
| return ContainerId.fromString(containerIdStr); |
| } |
| |
| /* |
| * This method is deprecated, use {@link ApplicationAttemptId#toString()} |
| * instead. |
| */ |
| @Public |
| @Deprecated |
| public static ApplicationAttemptId toApplicationAttemptId( |
| String applicationAttemptIdStr) { |
| return ApplicationAttemptId.fromString(applicationAttemptIdStr); |
| } |
| |
| /* |
| * This method is deprecated, use {@link ApplicationId#fromString(String)} |
| * instead. |
| */ |
| @Public |
| @Deprecated |
| public static ApplicationId toApplicationId( |
| String appIdStr) { |
| return ApplicationId.fromString(appIdStr); |
| } |
| |
| /** |
| * Convert a protobuf token into a rpc token and set its service. Supposed |
| * to be used for tokens other than RMDelegationToken. For |
| * RMDelegationToken, use |
| * {@link #convertFromYarn(org.apache.hadoop.yarn.api.records.Token, |
| * org.apache.hadoop.io.Text)} instead. |
| * |
| * @param protoToken the yarn token |
| * @param serviceAddr the connect address for the service |
| * @return rpc token |
| */ |
| public static <T extends TokenIdentifier> Token<T> convertFromYarn( |
| org.apache.hadoop.yarn.api.records.Token protoToken, |
| InetSocketAddress serviceAddr) { |
| Token<T> token = new Token<T>(protoToken.getIdentifier().array(), |
| protoToken.getPassword().array(), |
| new Text(protoToken.getKind()), |
| new Text(protoToken.getService())); |
| if (serviceAddr != null) { |
| SecurityUtil.setTokenService(token, serviceAddr); |
| } |
| return token; |
| } |
| |
| /** |
| * Convert a protobuf token into a rpc token and set its service. |
| * |
| * @param protoToken the yarn token |
| * @param service the service for the token |
| */ |
| public static <T extends TokenIdentifier> Token<T> convertFromYarn( |
| org.apache.hadoop.yarn.api.records.Token protoToken, |
| Text service) { |
| Token<T> token = new Token<T>(protoToken.getIdentifier().array(), |
| protoToken.getPassword().array(), |
| new Text(protoToken.getKind()), |
| new Text(protoToken.getService())); |
| |
| if (service != null) { |
| token.setService(service); |
| } |
| return token; |
| } |
| } |