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.scripting;
 
 import java.io.File;
 import java.io.Reader;
 import java.util.Map;
 import java.util.UUID;
 
 
This class helps a scripting UDF capture user output by managing when to capture output and where the output is written to. For illustrate, we will only capture output for the last run (with the final set of data) and we need to keep track of the file containing that output for returning w/ the illustrate results. For runs, all standard output is written to the user logs.
 
 public class ScriptingOutputCapturer {
     private static Log log = LogFactory.getLog(ScriptingOutputCapturer.class);
     
     private static Map<StringStringoutputFileNames = new HashMap<StringString>();
     private static String runId = UUID.randomUUID().toString(); //Unique ID for this run to ensure udf output files aren't corrupted from previous runs.
 
     //Illustrate will set the static flag telling udf to start capturing its output.  It's up to each
     //instance to react to it and set its own flag.
     private static boolean captureOutput = false;
     private boolean instancedCapturingOutput = false;
 
     private ExecType execType;
 
     public ScriptingOutputCapturer(ExecType execType) {
         this. = execType;
     }
 
         Configuration conf = UDFContext.getUDFContext().getJobConf();
         
         String jobId = conf.get("mapred.job.id");
         String taskId = conf.get("mapred.task.id");
         .debug("JobId: " + jobId);
         .debug("TaskId: " + taskId);
 
         if ( == .) {
             String logDir = System.getProperty("pig.udf.scripting.log.dir");
             if (logDir == null)
                 logDir = ".";
             return logDir + "/" + (taskId == null ? "" : (taskId + "_"));
         } else {
             String taskLogDir = getTaskLogDir(jobIdtaskId);
             return taskLogDir + "/";
         }
     }
 
     public String getTaskLogDir(String jobIdString taskId) {
         String taskLogDir;
         String hadoopLogDir = System.getProperty("hadoop.log.dir");
         String defaultUserLogDir = hadoopLogDir + . + "userlogs";
 
         if ( new File(defaultUserLogDir + . + jobId).exists() ) {
             taskLogDir = defaultUserLogDir + . + jobId + . + taskId;
         } else if ( new File(defaultUserLogDir + . + taskId).exists() ) {
             taskLogDir = defaultUserLogDir + . + taskId;
         } else if ( new File(defaultUserLogDir).exists() ){
             taskLogDir = defaultUserLogDir;
         } else {
             taskLogDir = hadoopLogDir + . + "udfOutput";
         }
         return taskLogDir;
     }
     
     public static void startCapturingOutput() {
    }
    
    public static Map<StringStringgetUdfOutput() throws IOException {
        Map<StringStringudfFuncNameToOutput = new HashMap<String,String>();
        for (Map.Entry<StringStringfuncToOutputFileName : .entrySet()) {
            StringBuffer udfOutput = new StringBuffer();
            FileInputStream fis = new FileInputStream(funcToOutputFileName.getValue());
            Reader fr = new InputStreamReader(fis.);
            BufferedReader br = new BufferedReader(fr);
            
            try {
                String line = br.readLine();
                while (line != null) {
                    udfOutput.append("\t" + line + "\n");
                    line = br.readLine();
                }
            } finally {
                br.close();
            }
            udfFuncNameToOutput.put(funcToOutputFileName.getKey(), udfOutput.toString());
        }
        return udfFuncNameToOutput;
    }
    
    public void registerOutputLocation(String functionNameString fileName) {
        .put(functionNamefileName);
    }
    
    public static String getRunId() {
        return ;
    }
    
    public static boolean isClassCapturingOutput() {
        return .;
    }
    
    public boolean isInstanceCapturingOutput() {
        return this.;
    }
    
    public void setInstanceCapturingOutput(boolean instanceCapturingOutput) {
        this. = instanceCapturingOutput;
    }
New to GrepCode? Check out our FAQ X