Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * 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.pig.impl.streaming;
 
 import static org.apache.pig.PigConfiguration.PIG_STREAMING_ENVIRONMENT;
 
 import java.io.File;
 import java.util.List;
 import java.util.Map;
 
 
 public class StreamingUtil {
     private static Log LOG = LogFactory.getLog(StreamingUtil.class);
     
     private static final String BASH = "bash";
     private static final String PATH = "PATH";
    
    
Create an external process for StreamingCommand command.

Parameters:
command
Returns:
 
     public static ProcessBuilder createProcess(StreamingCommand command) {
         // Set the actual command to run with 'bash -c exec ...'
         List<StringcmdArgs = new ArrayList<String>();
         String[] argv = command.getCommandArgs();
 
         StringBuffer argBuffer = new StringBuffer();
         for (String arg : argv) {
             argBuffer.append(arg);
             argBuffer.append(" ");
         }
         String argvAsString = argBuffer.toString();
         
         if (System.getProperty("os.name").toUpperCase().startsWith("WINDOWS")) {
           cmdArgs.add("cmd");
           cmdArgs.add("/c");
           cmdArgs.add(argvAsString);
         } else {
           cmdArgs.add();
           cmdArgs.add("-c");
           StringBuffer sb = new StringBuffer();
           sb.append("exec ");
           sb.append(argvAsString);
           cmdArgs.add(sb.toString());
         }
 
         // Start the external process
         ProcessBuilder processBuilder = new ProcessBuilder(cmdArgs
                 .toArray(new String[cmdArgs.size()]));
         setupEnvironment(processBuilder);
         return processBuilder;
     }
    
    
Set up the run-time environment of the managed process.

Parameters:
pb java.lang.ProcessBuilder used to exec the process
 
     private static void setupEnvironment(ProcessBuilder pb) {
         String separator = ":";
         Configuration conf = UDFContext.getUDFContext().getJobConf();
         Map<StringStringenv = pb.environment();
         addJobConfToEnvironment(confenv);
 
         // Add the current-working-directory to the $PATH
         File dir = pb.directory();
         String cwd = (dir != null) ? dir.getAbsolutePath() : System
                 .getProperty("user.dir");
 
         String envPath = env.get();
         if (envPath == null) {
             envPath = cwd;
         } else {
             envPath = envPath + separator + cwd;
         }
         env.put(envPath);
    }
    
    protected static void addJobConfToEnvironment(Configuration confMap<StringStringenv) {
        String propsToSend = conf.get();
        .debug("Properties to ship to streaming environment set in "++": " + propsToSend);
        if (propsToSend == null) {
            return;
        }
        for (String prop : propsToSend.split(",")) {
            String value = conf.get(prop);
            if (value == null) {
                .warn("Property set in "++" not found in Configuration: " + prop);
                continue;
            }
            .debug("Setting property in streaming environment: " + prop);
            envPut(envpropvalue);
        }
    }
    
    private static void envPut(Map<StringStringenvString nameString value) {
        if (.isDebugEnabled()) {
          .debug("Add  env entry:" + name + "=" + value);
        }
        env.put(namevalue);
    }
New to GrepCode? Check out our FAQ X