[ 
https://issues.apache.org/jira/browse/HIVE-7658?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14093032#comment-14093032
 ] 

Venki Korukanti commented on HIVE-7658:
---------------------------------------

Hive uses ClassLoader.getResource("hive-site.xml") for finding the path to 
hive-site.xml file. ClassLoader is retrieved using 
Thread.currentThread().getContextClassLoader() which returns a chain of class 
loaders. One of the ClassLoaders in the chain is 
sun.misc.Launcher$AppClassLoader. This particular ClassLoader treats the empty 
entry in ClassPath (example: /path/to/jar1.jar::/path/to/jar2) as current 
working directory of the process (see 
[here|https://community.oracle.com/thread/2456122?start=0&tstart=0]). If you 
look at the classpath of the Hive process, there is one such empty entry after 
the hadoop jars and before hive conf dir and hive jars. As the empty entry is 
before hive conf directory, ClassLoader picks up the first occurrence of 
hive-site.xml in current working directory.

Looking at the Hive scripts, adding empty path is an issue in hive scripts it 
self. Following line in {{bin/hive}} script causes an extra ":" before the hive 
constructed classpath when HADOOP_CLASSPATH is empty. "hadoop" scripts adds 
another ":" to its classpath and appends given hive classpath.

{code}
export HADOOP_CLASSPATH="${HADOOP_CLASSPATH}:${CLASSPATH}"
{code}


> Hive search order for hive-site.xml when using --config option
> --------------------------------------------------------------
>
>                 Key: HIVE-7658
>                 URL: https://issues.apache.org/jira/browse/HIVE-7658
>             Project: Hive
>          Issue Type: Bug
>          Components: CLI
>    Affects Versions: 0.13.0
>         Environment: Red Hat Enterprise Linux Server release 5.9 (Tikanga)
> Hive 0.13.0-mapr-1406
> Subversion git://rhbuild/root/builds/opensource/node/ecosystem/dl/hive -r 
> 4ff8f8b4a8fc4862727108204399710ef7ee7abc
> Compiled by root on Tue Jul 1 14:18:09 PDT 2014
> From source with checksum 208afc25260342b51aefd2e0edf4c9d6
>            Reporter: James Spurin
>            Priority: Minor
>
> When using the hive cli, the tool appears to favour a hive-site.xml file in 
> the current working directory even if the --config option is used with a 
> valid directory containing a hive-site.xml file.
> I would have expected the directory specified with --config to take 
> precedence in the CLASSPATH search order.
> Here's an example -
> /home/spurija/hive-site.xml =
> <configuration>
> <property>
>     <name>hive.exec.local.scratchdir</name>
>     <value>/tmp/example1</value>
> </property>
> </configuration>
> /tmp/hive/hive-site.xml =
> <configuration>
> <property>
>     <name>hive.exec.local.scratchdir</name>
>     <value>/tmp/example2</value>
> </property>
> </configuration>
> -bash-4.1$ diff /home/spurija/hive-site.xml /tmp/hive/hive-site.xml
> 23c23
> <     <value>/tmp/example1</value>
> ---
> >     <value>/tmp/example2</value>
> { check the value of scratchdir, should be example 1 }
> -bash-4.1$ pwd
> /home/spurija
> -bash-4.1$ hive
> Logging initialized using configuration in 
> jar:file:/opt/mapr/hive/hive-0.13/lib/hive-common-0.13.0-mapr-1405.jar!/hive-log4j.properties
> hive> set hive.exec.local.scratchdir;
> hive.exec.local.scratchdir=/tmp/example1
> { run with a specified config, check the value of scratchdir, should be 
> example2 … still reported as example1 }
> -bash-4.1$ pwd
> /home/spurija
> -bash-4.1$ hive --config /tmp/hive
> Logging initialized using configuration in 
> jar:file:/opt/mapr/hive/hive-0.13/lib/hive-common-0.13.0-mapr-1405.jar!/hive-log4j.properties
> hive> set hive.exec.local.scratchdir;
> hive.exec.local.scratchdir=/tmp/example1
> { remove the local config, check the value of scratchdir, should be example2 
> … now correct }
> -bash-4.1$ pwd
> /home/spurija
> -bash-4.1$ rm hive-site.xml
> -bash-4.1$ hive --config /tmp/hive
> Logging initialized using configuration in 
> jar:file:/opt/mapr/hive/hive-0.13/lib/hive-common-0.13.0-mapr-1405.jar!/hive-log4j.properties
> hive> set hive.exec.local.scratchdir;
> hive.exec.local.scratchdir=/tmp/example2
> Is this expected behavior or should it use the directory supplied with 
> --config as the preferred configuration?



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to