You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pig.apache.org by an...@apache.org on 2014/05/20 20:44:05 UTC
svn commit: r1596361 - in /pig/trunk: CHANGES.txt
src/org/apache/pig/impl/io/FileLocalizer.java
src/org/apache/pig/impl/util/Utils.java
Author: aniket486
Date: Tue May 20 18:44:05 2014
New Revision: 1596361
URL: http://svn.apache.org/r1596361
Log:
PIG-3929: pig.temp.dir should allow to substitute vars as hadoop configuration does (aniket486)
Modified:
pig/trunk/CHANGES.txt
pig/trunk/src/org/apache/pig/impl/io/FileLocalizer.java
pig/trunk/src/org/apache/pig/impl/util/Utils.java
Modified: pig/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/pig/trunk/CHANGES.txt?rev=1596361&r1=1596360&r2=1596361&view=diff
==============================================================================
--- pig/trunk/CHANGES.txt (original)
+++ pig/trunk/CHANGES.txt Tue May 20 18:44:05 2014
@@ -32,6 +32,8 @@ PIG-2207: Support custom counters for ag
IMPROVEMENTS
+PIG-3929: pig.temp.dir should allow to substitute vars as hadoop configuration does (aniket486)
+
PIG-3913: Pig should use job's jobClient wherever possible (fixes local mode counters) (aniket486)
PIG-3941: Piggybank's Over UDF returns an output schema with named fields (mrflip via cheolsoo)
Modified: pig/trunk/src/org/apache/pig/impl/io/FileLocalizer.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/impl/io/FileLocalizer.java?rev=1596361&r1=1596360&r2=1596361&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/impl/io/FileLocalizer.java (original)
+++ pig/trunk/src/org/apache/pig/impl/io/FileLocalizer.java Tue May 20 18:44:05 2014
@@ -58,6 +58,7 @@ import org.apache.pig.backend.hadoop.dat
import org.apache.pig.backend.hadoop.datastorage.HPath;
import org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigMapReduce;
import org.apache.pig.impl.PigContext;
+import org.apache.pig.impl.util.Utils;
import com.google.common.annotations.VisibleForTesting;
@@ -462,7 +463,7 @@ public class FileLocalizer {
throws DataStorageException {
if (relativeRoot.get() == null) {
- String tdir= pigContext.getProperties().getProperty(PigConfiguration.PIG_TEMP_DIR, "/tmp");
+ String tdir= Utils.substituteVars(pigContext.getProperties().getProperty(PigConfiguration.PIG_TEMP_DIR, "/tmp"));
ContainerDescriptor relative = pigContext.getDfs().asContainer(tdir + "/temp" + r.nextInt());
relativeRoot.set(relative);
try {
Modified: pig/trunk/src/org/apache/pig/impl/util/Utils.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/impl/util/Utils.java?rev=1596361&r1=1596360&r2=1596361&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/impl/util/Utils.java (original)
+++ pig/trunk/src/org/apache/pig/impl/util/Utils.java Tue May 20 18:44:05 2014
@@ -33,6 +33,8 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -529,4 +531,33 @@ public class Utils {
return pigContext.getExecType().isLocal() || conf.getBoolean(PigImplConstants.CONVERTED_TO_LOCAL, false);
}
+ // PIG-3929 use parameter substitution for pig properties similar to Hadoop Configuration
+ // Following code has been borrowed from Hadoop's Configuration#substituteVars
+ private static Pattern varPat = Pattern.compile("\\$\\{[^\\}\\$\u0020]+\\}");
+ private static int MAX_SUBST = 20;
+
+ public static String substituteVars(String expr) {
+ if (expr == null) {
+ return null;
+ }
+ Matcher match = varPat.matcher("");
+ String eval = expr;
+ for(int s=0; s<MAX_SUBST; s++) {
+ match.reset(eval);
+ if (!match.find()) {
+ return eval;
+ }
+ String var = match.group();
+ var = var.substring(2, var.length()-1); // remove ${ .. }
+ String val = null;
+ val = System.getProperty(var);
+ if (val == null) {
+ return eval; // return literal ${var}: var is unbound
+ }
+ // substitute
+ eval = eval.substring(0, match.start())+val+eval.substring(match.end());
+ }
+ throw new IllegalStateException("Variable substitution depth too large: "
+ + MAX_SUBST + " " + expr);
+ }
}