HADOOP-13045. hadoop_add_classpath is not working in .hadooprc

Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/971af603
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/971af603
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/971af603

Branch: refs/heads/HDFS-1312
Commit: 971af603ea2a5c0b5bdb2b79626a204b5dee241e
Parents: c7484eb
Author: Allen Wittenauer <a...@apache.org>
Authored: Sat Apr 30 12:23:51 2016 -0700
Committer: Allen Wittenauer <a...@apache.org>
Committed: Sat Apr 30 12:23:51 2016 -0700

----------------------------------------------------------------------
 .../hadoop-common/src/main/bin/hadoop-config.sh |  6 +++-
 .../src/main/bin/hadoop-functions.sh            | 14 +++++++++
 .../src/site/markdown/UnixShellGuide.md         | 32 ++++++++++++++------
 .../src/test/scripts/hadoop_confdir.bats        |  7 ++++-
 4 files changed, 48 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/971af603/hadoop-common-project/hadoop-common/src/main/bin/hadoop-config.sh
----------------------------------------------------------------------
diff --git a/hadoop-common-project/hadoop-common/src/main/bin/hadoop-config.sh 
b/hadoop-common-project/hadoop-common/src/main/bin/hadoop-config.sh
index fd2c83e..104247a 100755
--- a/hadoop-common-project/hadoop-common/src/main/bin/hadoop-config.sh
+++ b/hadoop-common-project/hadoop-common/src/main/bin/hadoop-config.sh
@@ -110,7 +110,7 @@ hadoop_exec_userfuncs
 # IMPORTANT! User provided code is now available!
 #
 
-hadoop_exec_hadooprc
+hadoop_exec_user_hadoopenv
 hadoop_verify_confdir
 
 # do all the OS-specific startup bits here
@@ -142,6 +142,10 @@ hadoop_shellprofiles_nativelib
 hadoop_add_common_to_classpath
 hadoop_shellprofiles_classpath
 
+# user API commands can now be run since the runtime
+# environment has been configured
+hadoop_exec_hadooprc
+
 #
 # backwards compatibility. new stuff should
 # call this when they are ready

http://git-wip-us.apache.org/repos/asf/hadoop/blob/971af603/hadoop-common-project/hadoop-common/src/main/bin/hadoop-functions.sh
----------------------------------------------------------------------
diff --git 
a/hadoop-common-project/hadoop-common/src/main/bin/hadoop-functions.sh 
b/hadoop-common-project/hadoop-common/src/main/bin/hadoop-functions.sh
index 6c4c345..48ad1e2 100755
--- a/hadoop-common-project/hadoop-common/src/main/bin/hadoop-functions.sh
+++ b/hadoop-common-project/hadoop-common/src/main/bin/hadoop-functions.sh
@@ -383,6 +383,20 @@ function hadoop_exec_userfuncs
 ## @audience     private
 ## @stability    evolving
 ## @replaceable  yes
+function hadoop_exec_user_hadoopenv
+{
+  if [[ -f "${HOME}/.hadoop-env" ]]; then
+    hadoop_debug "Applying the user's .hadoop-env"
+    # shellcheck disable=SC1090
+    . "${HOME}/.hadoop-env"
+  fi
+}
+
+## @description  Read the user's settings.  This provides for users to
+## @description  run Hadoop Shell API after system bootstrap
+## @audience     private
+## @stability    evolving
+## @replaceable  yes
 function hadoop_exec_hadooprc
 {
   if [[ -f "${HOME}/.hadooprc" ]]; then

http://git-wip-us.apache.org/repos/asf/hadoop/blob/971af603/hadoop-common-project/hadoop-common/src/site/markdown/UnixShellGuide.md
----------------------------------------------------------------------
diff --git 
a/hadoop-common-project/hadoop-common/src/site/markdown/UnixShellGuide.md 
b/hadoop-common-project/hadoop-common/src/site/markdown/UnixShellGuide.md
index caa3aa7..a5fa10c 100644
--- a/hadoop-common-project/hadoop-common/src/site/markdown/UnixShellGuide.md
+++ b/hadoop-common-project/hadoop-common/src/site/markdown/UnixShellGuide.md
@@ -16,15 +16,15 @@
 
 <!-- MACRO{toc|fromDepth=0|toDepth=3} -->
 
-Much of Hadoop's functionality is controlled via [the 
shell](CommandsManual.html).  There are several ways to modify the default 
behavior of how these commands execute.
+Much of Apache Hadoop's functionality is controlled via [the 
shell](CommandsManual.html).  There are several ways to modify the default 
behavior of how these commands execute.
 
 ## Important End-User Environment Variables
 
-Hadoop has many environment variables that control various aspects of the 
software.  (See `hadoop-env.sh` and related files.)  Some of these environment 
variables are dedicated to helping end users manage their runtime.
+Apache Hadoop has many environment variables that control various aspects of 
the software.  (See `hadoop-env.sh` and related files.)  Some of these 
environment variables are dedicated to helping end users manage their runtime.
 
 ### `HADOOP_CLIENT_OPTS`
 
-This environment variable is used for almost all end-user operations.  It can 
be used to set any Java options as well as any Hadoop options via a system 
property definition. For example:
+This environment variable is used for almost all end-user operations.  It can 
be used to set any Java options as well as any Apache Hadoop options via a 
system property definition. For example:
 
 ```bash
 HADOOP_CLIENT_OPTS="-Xmx1g -Dhadoop.socks.server=localhost:4000" hadoop fs -ls 
/tmp
@@ -34,7 +34,7 @@ will increase the memory and send this command via a SOCKS 
proxy server.
 
 ### `HADOOP_USER_CLASSPATH`
 
-The Hadoop scripts have the capability to inject more content into the 
classpath of the running command by setting this environment variable.  It 
should be a colon delimited list of directories, files, or wildcard locations.
+The Apache Hadoop scripts have the capability to inject more content into the 
classpath of the running command by setting this environment variable.  It 
should be a colon delimited list of directories, files, or wildcard locations.
 
 ```bash
 HADOOP_USER_CLASSPATH=${HOME}/lib/myjars/*.jar hadoop classpath
@@ -44,13 +44,13 @@ A user can provides hints to the location of the paths via 
the `HADOOP_USER_CLAS
 
 ### Auto-setting of Variables
 
-If a user has a common set of settings, they can be put into the 
`${HOME}/.hadooprc` file.  This file is always read to initialize and override 
any variables that the user may want to customize.  It uses bash syntax, 
similar to the `.bashrc` file:
+If a user has a common set of settings, they can be put into the 
`${HOME}/.hadoop-env` file.  This file is always read to initialize and 
override any variables that the user may want to customize.  It uses bash 
syntax, similar to the `.bashrc` file:
 
 For example:
 
 ```bash
 #
-# my custom Hadoop settings!
+# my custom Apache Hadoop settings!
 #
 
 HADOOP_USER_CLASSPATH=${HOME}/hadoopjars/*
@@ -58,7 +58,7 @@ HADOOP_USER_CLASSPATH_FIRST=yes
 HADOOP_CLIENT_OPTS="-Xmx1g"
 ```
 
-The `.hadooprc` file can also be used to extend functionality and teach Hadoop 
new tricks.  For example, to run hadoop commands accessing the server 
referenced in the environment variable `${HADOOP_SERVER}`, the following in the 
`.hadooprc` will do just that:
+The `.hadoop-env` file can also be used to extend functionality and teach 
Apache Hadoop new tricks.  For example, to run hadoop commands accessing the 
server referenced in the environment variable `${HADOOP_SERVER}`, the following 
in the `.hadoop-env` will do just that:
 
 ```bash
 
@@ -67,13 +67,15 @@ if [[ -n ${HADOOP_SERVER} ]]; then
 fi
 ```
 
+One word of warning:  not all of Unix Shell API routines are available or work 
correctly in `.hadoop-env`.  See below for more information on `.hadooprc`.
+
 ## Administrator Environment
 
 There are many environment variables that impact how the system operates.  By 
far, the most important are the series of `_OPTS` variables that control how 
daemons work.  These variables should contain all of the relevant settings for 
those daemons.
 
 More, detailed information is contained in `hadoop-env.sh` and the other 
env.sh files.
 
-Advanced administrators may wish to supplement or do some platform-specific 
fixes to the existing scripts.  In some systems, this means copying the errant 
script or creating a custom build with these changes.  Hadoop provides the 
capabilities to do function overrides so that the existing code base may be 
changed in place without all of that work.  Replacing functions is covered 
later under the Shell API documentation.
+Advanced administrators may wish to supplement or do some platform-specific 
fixes to the existing scripts.  In some systems, this means copying the errant 
script or creating a custom build with these changes.  Apache Hadoop provides 
the capabilities to do function overrides so that the existing code base may be 
changed in place without all of that work.  Replacing functions is covered 
later under the Shell API documentation.
 
 ## Developer and Advanced Administrator Environment
 
@@ -89,7 +91,7 @@ An example of a shell profile is in the libexec directory.
 
 ## Shell API
 
-Hadoop's shell code has a [function library](./UnixShellAPI.html) that is open 
for administrators and developers to use to assist in their configuration and 
advanced feature management.  These APIs follow the standard [Hadoop Interface 
Classification](./InterfaceClassification.html), with one addition: Replaceable.
+Apache Hadoop's shell code has a [function library](./UnixShellAPI.html) that 
is open for administrators and developers to use to assist in their 
configuration and advanced feature management.  These APIs follow the standard 
[Apache Hadoop Interface Classification](./InterfaceClassification.html), with 
one addition: Replaceable.
 
 The shell code allows for core functions to be overridden. However, not all 
functions can be or are safe to be replaced.  If a function is not safe to 
replace, it will have an attribute of Replaceable: No.  If a function is safe 
to replace, it will have the attribute of Replaceable: Yes.
 
@@ -98,3 +100,15 @@ In order to replace a function, create a file called 
`hadoop-user-functions.sh`
 
 Functions that are marked Public and Stable are safe to use in shell profiles 
as-is.  Other functions may change in a minor release.
 
+
+### User-level API Access
+
+In addition to `.hadoop-env`, which allows individual users to override 
`hadoop-env.sh`, user's may also use `.hadooprc`.  This is called after the 
Apache Hadoop shell environment has been configured and allows the full set of 
shell API function calls.
+
+For example:
+
+```bash
+hadoop_add_classpath /some/path/custom.jar
+```
+
+would go into `.hadooprc`

http://git-wip-us.apache.org/repos/asf/hadoop/blob/971af603/hadoop-common-project/hadoop-common/src/test/scripts/hadoop_confdir.bats
----------------------------------------------------------------------
diff --git 
a/hadoop-common-project/hadoop-common/src/test/scripts/hadoop_confdir.bats 
b/hadoop-common-project/hadoop-common/src/test/scripts/hadoop_confdir.bats
index 1f0c706..d4c1c60 100644
--- a/hadoop-common-project/hadoop-common/src/test/scripts/hadoop_confdir.bats
+++ b/hadoop-common-project/hadoop-common/src/test/scripts/hadoop_confdir.bats
@@ -89,4 +89,9 @@ create_fake_dirs () {
   [ ${unittest} = "hadooprc" ]
 }
 
-
+@test "hadoop_exec_user_hadoopenv" {
+  HOME=${TMP}
+  echo "unittest=hadoopenv" > "${TMP}/.hadoop-env"
+  hadoop_exec_user_hadoopenv
+  [ ${unittest} = "hadoopenv" ]
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org
For additional commands, e-mail: common-commits-h...@hadoop.apache.org

Reply via email to