Author: cws Date: Thu May 10 21:30:15 2012 New Revision: 1336906 URL: http://svn.apache.org/viewvc?rev=1336906&view=rev Log: HIVE-2757. Hive can't find hadoop executor scripts without HADOOP_HOME set (Roman Shaposhnik via cws)
Modified: hive/trunk/bin/ext/help.sh hive/trunk/bin/hive hive/trunk/bin/init-hive-dfs.sh hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java Modified: hive/trunk/bin/ext/help.sh URL: http://svn.apache.org/viewvc/hive/trunk/bin/ext/help.sh?rev=1336906&r1=1336905&r2=1336906&view=diff ============================================================================== --- hive/trunk/bin/ext/help.sh (original) +++ hive/trunk/bin/ext/help.sh Thu May 10 21:30:15 2012 @@ -24,7 +24,7 @@ help() { echo " --config : Hive configuration directory" echo " --service : Starts specific service/component. cli is default" echo "Parameters used:" - echo " HADOOP_HOME : Hadoop install directory" + echo " HADOOP_HOME or HADOOP_PREFIX : Hadoop install directory" echo " HIVE_OPT : Hive options" echo "For help on a particular service:" echo " ./hive --service serviceName --help" Modified: hive/trunk/bin/hive URL: http://svn.apache.org/viewvc/hive/trunk/bin/hive?rev=1336906&r1=1336905&r2=1336906&view=diff ============================================================================== --- hive/trunk/bin/hive (original) +++ hive/trunk/bin/hive Thu May 10 21:30:15 2012 @@ -155,15 +155,15 @@ if [ -f ${HADOOP_IN_PATH} ]; then HADOOP_DIR=`dirname "$HADOOP_IN_PATH"`/.. fi # HADOOP_HOME env variable overrides hadoop in the path -HADOOP_HOME=${HADOOP_HOME:-$HADOOP_DIR} +HADOOP_HOME=${HADOOP_HOME:-${HADOOP_PREFIX:-$HADOOP_DIR}} if [ "$HADOOP_HOME" == "" ]; then - echo "Cannot find hadoop installation: \$HADOOP_HOME must be set or hadoop must be in the path"; + echo "Cannot find hadoop installation: \$HADOOP_HOME or \$HADOOP_PREFIX must be set or hadoop must be in the path"; exit 4; fi HADOOP=$HADOOP_HOME/bin/hadoop if [ ! -f ${HADOOP} ]; then - echo "Cannot find hadoop installation: \$HADOOP_HOME must be set or hadoop must be in the path"; + echo "Cannot find hadoop installation: \$HADOOP_HOME or \$HADOOP_PREFIX must be set or hadoop must be in the path"; exit 4; fi Modified: hive/trunk/bin/init-hive-dfs.sh URL: http://svn.apache.org/viewvc/hive/trunk/bin/init-hive-dfs.sh?rev=1336906&r1=1336905&r2=1336906&view=diff ============================================================================== --- hive/trunk/bin/init-hive-dfs.sh (original) +++ hive/trunk/bin/init-hive-dfs.sh Thu May 10 21:30:15 2012 @@ -62,15 +62,15 @@ if [ -f ${HADOOP_IN_PATH} ]; then HADOOP_DIR=`dirname "$HADOOP_IN_PATH"`/.. fi # HADOOP_HOME env variable overrides hadoop in the path -HADOOP_HOME=${HADOOP_HOME:-$HADOOP_DIR} +HADOOP_HOME=${HADOOP_HOME:-${HADOOP_PREFIX:-$HADOOP_DIR}} if [ "$HADOOP_HOME" == "" ]; then - echo "Cannot find hadoop installation: \$HADOOP_HOME must be set or hadoop must be in the path"; + echo "Cannot find hadoop installation: \$HADOOP_HOME or \$HADOOP_PREFIX must be set or hadoop must be in the path"; exit 4; fi HADOOP_EXEC=$HADOOP_HOME/bin/hadoop if [ ! -f ${HADOOP} ]; then - echo "Cannot find hadoop installation: \$HADOOP_HOME must be set or hadoop must be in the path"; + echo "Cannot find hadoop installation: \$HADOOP_HOME or \$HADOOP_PREFIX must be set or hadoop must be in the path"; exit 4; fi Modified: hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java URL: http://svn.apache.org/viewvc/hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java?rev=1336906&r1=1336905&r2=1336906&view=diff ============================================================================== --- hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java (original) +++ hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java Thu May 10 21:30:15 2012 @@ -207,8 +207,7 @@ public class HiveConf extends Configurat // Properties with null values are ignored and exist only for the purpose of giving us // a symbolic name to reference in the Hive source code. Properties with non-null // values will override any values set in the underlying Hadoop configuration. - HADOOPBIN("hadoop.bin.path", System.getenv("HADOOP_HOME") + "/bin/hadoop"), - HADOOPCONF("hadoop.config.dir", System.getenv("HADOOP_HOME") + "/conf"), + HADOOPBIN("hadoop.bin.path", findHadoopBinary()), HADOOPFS("fs.default.name", null), HIVE_FS_HAR_IMPL("fs.har.impl", "org.apache.hadoop.hive.shims.HiveHarFileSystem"), HADOOPMAPFILENAME("map.input.file", null), @@ -845,14 +844,6 @@ public class HiveConf extends Configurat addResource(hiveSiteURL); } - // if hadoop configuration files are already in our path - then define - // the containing directory as the configuration directory - URL hadoopconfurl = getClassLoader().getResource("core-site.xml"); - if (hadoopconfurl != null) { - String conffile = hadoopconfurl.getPath(); - this.setVar(ConfVars.HADOOPCONF, conffile.substring(0, conffile.lastIndexOf('/'))); - } - // Overlay the values of any system properties whose names appear in the list of ConfVars applySystemProperties(); @@ -913,6 +904,16 @@ public class HiveConf extends Configurat } } + private static String findHadoopBinary() { + String val = System.getenv("HADOOP_HOME"); + // In Hadoop 1.X and Hadoop 2.X HADOOP_HOME is gone and replaced with HADOOP_PREFIX + if (val == null) { + val = System.getenv("HADOOP_PREFIX"); + } + // and if all else fails we can at least try /usr/bin/hadoop + return (val == null ? File.separator + "usr" : val) + File.separator + "bin" + File.separator + "hadoop"; + } + public Properties getChangedProperties() { Properties ret = new Properties(); Properties newProp = getAllProperties();