我正在尝试运行“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
他们都没有奏效。请帮忙!!
答案 0 :(得分:1)
问题是给定的sudo命令会让root用户配置文件执行hadoop命令,似乎允许你的用户配置文件以root身份执行sudo。
希望您在用户登录的配置文件中进行环境变量设置,一旦您使用sudo,root用户配置文件将无法了解您在配置文件中所做的设置。
因此,在使用sudo hadoop命令之前,必须在root用户配置文件中进行相同的设置。
否则你可以使用sudo命令使用hadoop二进制文件的绝对路径。
答案 1 :(得分:0)
您已为自己设置了环境变量。默认情况下,当您运行sudo时,它不会使用它们,以避免安全性暴露根用户使用的不安全的东西。根据{{3}},如果使用-E
选项,它将在运行命令之前复制环境变量设置。您需要确保这不会导致安全性受损。