以sudo

时间:2015-04-24 13:44:50

标签: bash hadoop

我正在尝试运行“sudo hadoop namenode -format”。我需要将它作为sudo运行,所以我不能改变它。但这样做会产生错误:

sudo: hadoop: command not found

我在/ etc / environment中输入了变量:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/cloud-user/hadoop-2.2.0/bin:/home/cloud-user/hadoop-2.2.0/sbin"
JAVA_HOME="/usr/lib/jvm/java-7-openjdk-amd64"
HADOOP_INSTALL="/home/cloud-user/hadoop-2.2.0"
HADOOP_MAPRED_HOME="/home/cloud-user/hadoop-2.2.0"
HADOOP_COMMON_HOME="/home/cloud-user/hadoop-2.2.0"
HADOOP_HDFS_HOME="/home/cloud-user/hadoop-2.2.0"
YARN_HOME="/home/cloud-user/hadoop-2.2.0"
HADOOP_COMMON_LIB_NATIVE_DIR="/home/cloud-user/hadoop-2.2.0/lib/native"

然后我在/etc/profile.d下创建了一个文件,名为myenvvars.sh,内容为:

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export HADOOP_INSTALL=/home/cloud-user/hadoop-2.2.0
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
export HADOOP_OPTS=-Djava.library.path=/lib

最后,我在/etc/bash.bashrc中写了同样的东西。

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export HADOOP_INSTALL=/home/cloud-user/hadoop-2.2.0
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
export HADOOP_OPTS=-Djava.library.path=/lib

他们都没有奏效。请帮忙!!

2 个答案:

答案 0 :(得分:1)

问题是给定的sudo命令会让root用户配置文件执行hadoop命令,似乎允许你的用户配置文件以root身份执行sudo。

希望您在用户登录的配置文件中进行环境变量设置,一旦您使用sudo,root用户配置文件将无法了解您在配置文件中所做的设置。

因此,在使用sudo hadoop命令之前,必须在root用户配置文件中进行相同的设置。

否则你可以使用sudo命令使用hadoop二进制文件的绝对路径。

答案 1 :(得分:0)

您已为自己设置了环境变量。默认情况下,当您运行sudo时,它不会使用它们,以避免安全性暴露根用户使用的不安全的东西。根据{{​​3}},如果使用-E选项,它将在运行命令之前复制环境变量设置。您需要确保这不会导致安全性受损。