Environment.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:4k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.streaming;
  19. import java.io.*;
  20. import java.net.InetAddress;
  21. import java.util.*;
  22. /**
  23.  * This is a class used to get the current environment
  24.  * on the host machines running the map/reduce. This class
  25.  * assumes that setting the environment in streaming is 
  26.  * allowed on windows/ix/linuz/freebsd/sunos/solaris/hp-ux
  27.  */
  28. public class Environment extends Properties {
  29.   public Environment() throws IOException {
  30.     // Extend this code to fit all operating
  31.     // environments that you expect to run in
  32.     // http://lopica.sourceforge.net/os.html
  33.     String command = null;
  34.     String OS = System.getProperty("os.name");
  35.     String lowerOs = OS.toLowerCase();
  36.     if (OS.indexOf("Windows") > -1) {
  37.       command = "cmd /C set";
  38.     } else if (lowerOs.indexOf("ix") > -1 || lowerOs.indexOf("linux") > -1
  39.                || lowerOs.indexOf("freebsd") > -1 || lowerOs.indexOf("sunos") > -1
  40.                || lowerOs.indexOf("solaris") > -1 || lowerOs.indexOf("hp-ux") > -1) {
  41.       command = "env";
  42.     } else if (lowerOs.startsWith("mac os x") || lowerOs.startsWith("darwin")) {
  43.       command = "env";
  44.     } else {
  45.       // Add others here
  46.     }
  47.     if (command == null) {
  48.       throw new RuntimeException("Operating system " + OS + " not supported by this class");
  49.     }
  50.     // Read the environment variables
  51.     Process pid = Runtime.getRuntime().exec(command);
  52.     BufferedReader in = new BufferedReader(new InputStreamReader(pid.getInputStream()));
  53.     while (true) {
  54.       String line = in.readLine();
  55.       if (line == null) break;
  56.       int p = line.indexOf("=");
  57.       if (p != -1) {
  58.         String name = line.substring(0, p);
  59.         String value = line.substring(p + 1);
  60.         setProperty(name, value);
  61.       }
  62.     }
  63.     in.close();
  64.     try {
  65.       pid.waitFor();
  66.     } catch (InterruptedException e) {
  67.       throw new IOException(e.getMessage());
  68.     }
  69.   }
  70.   // to be used with Runtime.exec(String[] cmdarray, String[] envp) 
  71.   String[] toArray() {
  72.     String[] arr = new String[super.size()];
  73.     Enumeration it = super.keys();
  74.     int i = -1;
  75.     while (it.hasMoreElements()) {
  76.       String key = (String) it.nextElement();
  77.       String val = (String) get(key);
  78.       i++;
  79.       arr[i] = key + "=" + val;
  80.     }
  81.     return arr;
  82.   }
  83.   public Map<String, String> toMap() {
  84.     Map<String, String> map = new HashMap<String, String>();
  85.     Enumeration<Object> it = super.keys();
  86.     while (it.hasMoreElements()) {
  87.       String key = (String) it.nextElement();
  88.       String val = (String) get(key);
  89.       map.put(key, val);
  90.     }
  91.     return map;
  92.   }
  93.   
  94.   public String getHost() {
  95.     String host = getProperty("HOST");
  96.     if (host == null) {
  97.       // HOST isn't always in the environment
  98.       try {
  99.         host = InetAddress.getLocalHost().getHostName();
  100.       } catch (IOException io) {
  101.         io.printStackTrace();
  102.       }
  103.     }
  104.     return host;
  105.   }
  106. }