[
https://issues.apache.org/jira/browse/HADOOP-17266?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Chengbing Liu updated HADOOP-17266:
-----------------------------------
Description:
Steps to reproduce:
1. Set {{HDFS_NAMENODE_USER=hdfs}} in {{/etc/default/hadoop-hdfs-namenode}} to
enable user check (and switch to {{hdfs}} to start/stop NameNode daemon)
2. Stop NameNode with: {{service hadoop-hdfs-namenode stop}}
3. Got an error and NameNode is not stopped
{noformat}
ERROR: Cannot execute /usr/lib/hadoop-hdfs/bin/../libexec/hdfs-config.sh.
Failed to stop Hadoop namenode. Return value: 1. [FAILED]
{noformat}
The root cause is that after sudo, {{HADOOP_HOME=/usr/lib/hadoop}} is not
preserved, and {{/usr/lib/hadoop-hdfs/bin/hdfs}} locates libexec by the
following logic:
{noformat}
# let's locate libexec...
if [[ -n "${HADOOP_HOME}" ]]; then
HADOOP_DEFAULT_LIBEXEC_DIR="${HADOOP_HOME}/libexec"
else
bin=$(cd -P -- "$(dirname -- "${MYNAME}")" >/dev/null && pwd -P)
HADOOP_DEFAULT_LIBEXEC_DIR="${bin}/../libexec"
fi
{noformat}
I believe the key point here is that we should preserve environment variables
when doing sudo.
Note that this bug is not introduced by HDFS-15353, before which {{su -l}} is
used, which will also discard environment variables.
was:
Steps to reproduce:
1. Set {{HDFS_NAMENODE_USER=hdfs}} in {{/etc/default/hadoop-hdfs-namenode}} to
enable user check (and switch to {{hdfs}} to start/stop NameNode daemon)
2. Stop NameNode with: {{service hadoop-hdfs-namenode stop}}
3. Got an error and NameNode is not stopped
{{
ERROR: Cannot execute /usr/lib/hadoop-hdfs/bin/../libexec/hdfs-config.sh.
Failed to stop Hadoop namenode. Return value: 1. [FAILED]}}
The root cause is that after sudo, {{HADOOP_HOME=/usr/lib/hadoop}} is not
preserved, and {{/usr/lib/hadoop-hdfs/bin/hdfs}} locates libexec by the
following logic:
{{
# let's locate libexec...
if [[ -n "${HADOOP_HOME}" ]]; then
HADOOP_DEFAULT_LIBEXEC_DIR="${HADOOP_HOME}/libexec"
else
bin=$(cd -P -- "$(dirname -- "${MYNAME}")" >/dev/null && pwd -P)
HADOOP_DEFAULT_LIBEXEC_DIR="${bin}/../libexec"
fi}}
I believe the key point here is that we should preserve environment variables
when doing sudo.
Note that this bug is not introduced by HDFS-15353, before which {{su -l}} is
used, which will also discard environment variables.
> Sudo in hadoop-functions.sh should preserve environment variables
> ------------------------------------------------------------------
>
> Key: HADOOP-17266
> URL: https://issues.apache.org/jira/browse/HADOOP-17266
> Project: Hadoop Common
> Issue Type: Bug
> Components: scripts
> Affects Versions: 3.3.0
> Reporter: Chengbing Liu
> Priority: Major
>
> Steps to reproduce:
> 1. Set {{HDFS_NAMENODE_USER=hdfs}} in {{/etc/default/hadoop-hdfs-namenode}}
> to enable user check (and switch to {{hdfs}} to start/stop NameNode daemon)
> 2. Stop NameNode with: {{service hadoop-hdfs-namenode stop}}
> 3. Got an error and NameNode is not stopped
> {noformat}
> ERROR: Cannot execute /usr/lib/hadoop-hdfs/bin/../libexec/hdfs-config.sh.
> Failed to stop Hadoop namenode. Return value: 1. [FAILED]
> {noformat}
> The root cause is that after sudo, {{HADOOP_HOME=/usr/lib/hadoop}} is not
> preserved, and {{/usr/lib/hadoop-hdfs/bin/hdfs}} locates libexec by the
> following logic:
> {noformat}
> # let's locate libexec...
> if [[ -n "${HADOOP_HOME}" ]]; then
> HADOOP_DEFAULT_LIBEXEC_DIR="${HADOOP_HOME}/libexec"
> else
> bin=$(cd -P -- "$(dirname -- "${MYNAME}")" >/dev/null && pwd -P)
> HADOOP_DEFAULT_LIBEXEC_DIR="${bin}/../libexec"
> fi
> {noformat}
> I believe the key point here is that we should preserve environment variables
> when doing sudo.
> Note that this bug is not introduced by HDFS-15353, before which {{su -l}} is
> used, which will also discard environment variables.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]