You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ek...@apache.org on 2014/11/21 20:24:55 UTC
svn commit: r1640981 - in
/hive/trunk/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton:
AppConfig.java tool/TempletonUtils.java tool/TrivialExecService.java
Author: ekoifman
Date: Fri Nov 21 19:24:54 2014
New Revision: 1640981
URL: http://svn.apache.org/r1640981
Log:
HIVE-8877 improve context logging during job submission via WebHCat (reviewed by Thejas Nair)
Modified:
hive/trunk/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/AppConfig.java
hive/trunk/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/tool/TempletonUtils.java
hive/trunk/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/tool/TrivialExecService.java
Modified: hive/trunk/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/AppConfig.java
URL: http://svn.apache.org/viewvc/hive/trunk/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/AppConfig.java?rev=1640981&r1=1640980&r2=1640981&view=diff
==============================================================================
--- hive/trunk/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/AppConfig.java (original)
+++ hive/trunk/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/AppConfig.java Fri Nov 21 19:24:54 2014
@@ -28,12 +28,14 @@ import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.StringTokenizer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hive.conf.HiveConf;
+import org.apache.hadoop.hive.conf.SystemVariables;
import org.apache.hadoop.util.StringUtils;
import org.apache.hadoop.util.VersionInfo;
import org.apache.hive.hcatalog.templeton.tool.JobState;
@@ -224,14 +226,8 @@ public class AppConfig extends Configura
* support/debugging. Later it may be worth adding a REST call which will return this data.
*/
private String dumpEnvironent() {
- StringBuilder sb = new StringBuilder("WebHCat environment:\n");
- Map<String, String> env = System.getenv();
- List<String> propKeys = new ArrayList<String>(env.keySet());
- Collections.sort(propKeys);
- for(String propKey : propKeys) {
- sb.append(propKey).append('=').append(env.get(propKey)).append('\n');
- }
- sb.append("Configration properties: \n");
+ StringBuilder sb = TempletonUtils.dumpPropMap("========WebHCat System.getenv()========", System.getenv());
+ sb.append("START========WebHCat AppConfig.iterator()========: \n");
Iterator<Map.Entry<String, String>> configIter = this.iterator();
List<Map.Entry<String, String>> configVals = new ArrayList<Map.Entry<String, String>>();
while(configIter.hasNext()) {
@@ -245,8 +241,19 @@ public class AppConfig extends Configura
});
for(Map.Entry<String, String> entry : configVals) {
//use get() to make sure variable substitution works
- sb.append(entry.getKey()).append('=').append(get(entry.getKey())).append('\n');
+ if(entry.getKey().toLowerCase().contains("path")) {
+ StringTokenizer st = new StringTokenizer(get(entry.getKey()), File.pathSeparator);
+ sb.append(entry.getKey()).append("=\n");
+ while(st.hasMoreTokens()) {
+ sb.append(" ").append(st.nextToken()).append(File.pathSeparator).append('\n');
+ }
+ }
+ else {
+ sb.append(entry.getKey()).append('=').append(get(entry.getKey())).append('\n');
+ }
}
+ sb.append("END========WebHCat AppConfig.iterator()========: \n");
+ sb.append(TempletonUtils.dumpPropMap("========WebHCat System.getProperties()========", System.getProperties()));
return sb.toString();
}
public void startCleanup() {
Modified: hive/trunk/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/tool/TempletonUtils.java
URL: http://svn.apache.org/viewvc/hive/trunk/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/tool/TempletonUtils.java?rev=1640981&r1=1640980&r2=1640981&view=diff
==============================================================================
--- hive/trunk/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/tool/TempletonUtils.java (original)
+++ hive/trunk/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/tool/TempletonUtils.java Fri Nov 21 19:24:54 2014
@@ -18,6 +18,7 @@
*/
package org.apache.hive.hcatalog.templeton.tool;
+import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
@@ -34,6 +35,8 @@ import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Properties;
+import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -408,4 +411,34 @@ public class TempletonUtils {
}
return null;
}
+ public static StringBuilder dumpPropMap(String header, Properties props) {
+ Map<String, String> map = new HashMap<String, String>();
+ for(Map.Entry<Object, Object> ent : props.entrySet()) {
+ map.put(ent.getKey().toString(), ent.getValue() == null ? null : ent.getValue().toString());
+ }
+ return dumpPropMap(header, map);
+ }
+ public static StringBuilder dumpPropMap(String header, Map<String, String> map) {
+ StringBuilder sb = new StringBuilder("START").append(header).append(":\n");
+ List<String> propKeys = new ArrayList<String>(map.keySet());
+ Collections.sort(propKeys);
+ for(String propKey : propKeys) {
+ if(propKey.toLowerCase().contains("path")) {
+ StringTokenizer st = new StringTokenizer(map.get(propKey), File.pathSeparator);
+ if(st.countTokens() > 1) {
+ sb.append(propKey).append("=\n");
+ while (st.hasMoreTokens()) {
+ sb.append(" ").append(st.nextToken()).append(File.pathSeparator).append('\n');
+ }
+ }
+ else {
+ sb.append(propKey).append('=').append(map.get(propKey)).append('\n');
+ }
+ }
+ else {
+ sb.append(propKey).append('=').append(map.get(propKey)).append('\n');
+ }
+ }
+ return sb.append("END").append(header).append('\n');
+ }
}
Modified: hive/trunk/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/tool/TrivialExecService.java
URL: http://svn.apache.org/viewvc/hive/trunk/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/tool/TrivialExecService.java?rev=1640981&r1=1640980&r2=1640981&view=diff
==============================================================================
--- hive/trunk/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/tool/TrivialExecService.java (original)
+++ hive/trunk/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/tool/TrivialExecService.java Fri Nov 21 19:24:54 2014
@@ -20,7 +20,6 @@ package org.apache.hive.hcatalog.templet
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.fs.Path;
import java.io.File;
import java.io.IOException;
@@ -28,6 +27,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
+import java.util.StringTokenizer;
/**
@@ -61,16 +61,47 @@ final class TrivialExecService {
pb.environment().remove(key);
}
pb.environment().putAll(environmentVariables);
- logDebugInfo("Starting process with env:", pb.environment());
+ logDebugInfo("========Starting process with env:========", pb.environment());
+ printContentsOfDir(".");
return pb.start();
}
private static void logDebugInfo(String msg, Map<String, String> props) {
- LOG.info(msg);
- List<String> keys = new ArrayList<String>();
- keys.addAll(props.keySet());
- Collections.sort(keys);
- for(String key : keys) {
- LOG.info(key + "=" + props.get(key));
- }
+ StringBuilder sb = TempletonUtils.dumpPropMap(msg, props);
+ LOG.info(sb.toString());
+ String sqoopHome = props.get("SQOOP_HOME");
+ if(TempletonUtils.isset(sqoopHome)) {
+ //this is helpful when Sqoop is installed on each node in the cluster to make sure
+ //relevant jars (JDBC in particular) are present on the node running the command
+ printContentsOfDir(sqoopHome + File.separator+ "lib");
+ }
+ }
+ /**
+ * Print files and directories in current directory. Will list files in the sub-directory (only 1 level deep)
+ * time honored tradition in WebHCat of borrowing from Oozie
+ */
+ private static void printContentsOfDir(String dir) {
+ File folder = new File(dir);
+ StringBuilder sb = new StringBuilder("Files in '").append(dir).append("' dir:").append(folder.getAbsolutePath()).append('\n');
+
+ File[] listOfFiles = folder.listFiles();
+ for (File fileName : listOfFiles) {
+ if (fileName.isFile()) {
+ sb.append("File: ").append(fileName.getName()).append('\n');
+ }
+ else if (fileName.isDirectory()) {
+ sb.append("Dir: ").append(fileName.getName()).append('\n');
+ File subDir = new File(fileName.getName());
+ File[] moreFiles = subDir.listFiles();
+ for (File subFileName : moreFiles) {
+ if (subFileName.isFile()) {
+ sb.append("--File: ").append(subFileName.getName()).append('\n');
+ }
+ else if (subFileName.isDirectory()) {
+ sb.append("--Dir: ").append(subFileName.getName()).append('\n');
+ }
+ }
+ }
+ }
+ LOG.info(sb.toString());
}
}